{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**基于Jupyter的特征工程笔记本1: 数据预处理**  \n",
    "*作者: 陈颖祥，杨子唅*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Reference**:  \n",
    "- https://scikit-learn.org/stable/modules/preprocessing.html#preprocessing\n",
    "- https://towardsdatascience.com/preprocessing-with-sklearn-a-complete-and-comprehensive-guide-670cb98fcfb9\n",
    "- https://www.analyticsvidhya.com/blog/2016/07/practical-guide-data-preprocessing-python-scikit-learn/\n",
    "- Sarkar, D., Bali, R., & Sharma, T. (2018). Practical Machine Learning with Python. A Problem-Solvers Guide To Building Real-World Intelligent Systems, Berkely.\n",
    "- https://contrib.scikit-learn.org/categorical-encoding/index.html\n",
    "- https://towardsdatascience.com/all-about-categorical-variable-encoding-305f3361fd02\n",
    "- https://stats.idre.ucla.edu/r/library/r-library-contrast-coding-systems-for-categorical-variables/\n",
    "- https://kiwidamien.github.io/james-stein-encoder.html\n",
    "- https://chris-said.io/2017/05/03/empirical-bayes-for-multiple-sample-sizes/\n",
    "- http://support.sas.com/documentation/cdl/en/prochp/66704/HTML/default/viewer.htm#prochp_hpbin_details02.htm\n",
    "- https://catboost.ai/docs/concepts/algorithm-main-stages_cat-to-numberic.html\n",
    "- https://docs.featuretools.com/en/stable/index.html\n",
    "- https://heartbeat.fritz.ai/introduction-to-automated-feature-engineering-using-deep-feature-synthesis-dfs-3feb69a7c00b"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "toc": true
   },
   "source": [
    "<h1>Table of Contents<span class=\"tocSkip\"></span></h1>\n",
    "<div class=\"toc\"><ul class=\"toc-item\"><li><span><a href=\"#Data-Prepocessing-数据预处理\" data-toc-modified-id=\"Data-Prepocessing-数据预处理-1\"><span class=\"toc-item-num\">1&nbsp;&nbsp;</span>Data Prepocessing 数据预处理</a></span><ul class=\"toc-item\"><li><span><a href=\"#Static-Continuous-Variables-静态连续变量\" data-toc-modified-id=\"Static-Continuous-Variables-静态连续变量-1.1\"><span class=\"toc-item-num\">1.1&nbsp;&nbsp;</span>Static Continuous Variables 静态连续变量</a></span><ul class=\"toc-item\"><li><span><a href=\"#Discretization-离散化\" data-toc-modified-id=\"Discretization-离散化-1.1.1\"><span class=\"toc-item-num\">1.1.1&nbsp;&nbsp;</span>Discretization 离散化</a></span><ul class=\"toc-item\"><li><span><a href=\"#Binarization-二值化\" data-toc-modified-id=\"Binarization-二值化-1.1.1.1\"><span class=\"toc-item-num\">1.1.1.1&nbsp;&nbsp;</span>Binarization 二值化</a></span></li><li><span><a href=\"#Binning-分箱\" data-toc-modified-id=\"Binning-分箱-1.1.1.2\"><span class=\"toc-item-num\">1.1.1.2&nbsp;&nbsp;</span>Binning 分箱</a></span></li></ul></li><li><span><a href=\"#Scaling-缩放\" data-toc-modified-id=\"Scaling-缩放-1.1.2\"><span class=\"toc-item-num\">1.1.2&nbsp;&nbsp;</span>Scaling 缩放</a></span><ul class=\"toc-item\"><li><span><a href=\"#Stardard-Scaling-标准缩放（Z-分数标准化）\" data-toc-modified-id=\"Stardard-Scaling-标准缩放（Z-分数标准化）-1.1.2.1\"><span class=\"toc-item-num\">1.1.2.1&nbsp;&nbsp;</span>Stardard Scaling 标准缩放（Z 分数标准化）</a></span></li><li><span><a href=\"#MinMaxScaler-最大最小缩放-(按数值范围缩放)\" data-toc-modified-id=\"MinMaxScaler-最大最小缩放-(按数值范围缩放)-1.1.2.2\"><span class=\"toc-item-num\">1.1.2.2&nbsp;&nbsp;</span>MinMaxScaler 最大最小缩放 (按数值范围缩放)</a></span></li><li><span><a href=\"#RobustScaler-稳健缩放-(抗异常值缩放)\" data-toc-modified-id=\"RobustScaler-稳健缩放-(抗异常值缩放)-1.1.2.3\"><span class=\"toc-item-num\">1.1.2.3&nbsp;&nbsp;</span>RobustScaler 稳健缩放 (抗异常值缩放)</a></span></li><li><span><a href=\"#Power-Transform-幂次变换-(非线性变换)\" data-toc-modified-id=\"Power-Transform-幂次变换-(非线性变换)-1.1.2.4\"><span class=\"toc-item-num\">1.1.2.4&nbsp;&nbsp;</span>Power Transform 幂次变换 (非线性变换)</a></span></li></ul></li><li><span><a href=\"#Normalization-正则化\" data-toc-modified-id=\"Normalization-正则化-1.1.3\"><span class=\"toc-item-num\">1.1.3&nbsp;&nbsp;</span>Normalization 正则化</a></span></li><li><span><a href=\"#Imputation-of-missing-values-缺失值填补\" data-toc-modified-id=\"Imputation-of-missing-values-缺失值填补-1.1.4\"><span class=\"toc-item-num\">1.1.4&nbsp;&nbsp;</span>Imputation of missing values 缺失值填补</a></span><ul class=\"toc-item\"><li><span><a href=\"#Univariate-feature-imputation-单变量特征插补\" data-toc-modified-id=\"Univariate-feature-imputation-单变量特征插补-1.1.4.1\"><span class=\"toc-item-num\">1.1.4.1&nbsp;&nbsp;</span>Univariate feature imputation 单变量特征插补</a></span></li><li><span><a href=\"#Multivariate-feature-imputation-多元特征插补\" data-toc-modified-id=\"Multivariate-feature-imputation-多元特征插补-1.1.4.2\"><span class=\"toc-item-num\">1.1.4.2&nbsp;&nbsp;</span>Multivariate feature imputation 多元特征插补</a></span></li><li><span><a href=\"#Marking-imputed-values-标记估算值\" data-toc-modified-id=\"Marking-imputed-values-标记估算值-1.1.4.3\"><span class=\"toc-item-num\">1.1.4.3&nbsp;&nbsp;</span>Marking imputed values 标记估算值</a></span></li></ul></li><li><span><a href=\"#Feature-Transformation-特征变换\" data-toc-modified-id=\"Feature-Transformation-特征变换-1.1.5\"><span class=\"toc-item-num\">1.1.5&nbsp;&nbsp;</span>Feature Transformation 特征变换</a></span><ul class=\"toc-item\"><li><span><a href=\"#Polynomial-Transformation-多项式变换\" data-toc-modified-id=\"Polynomial-Transformation-多项式变换-1.1.5.1\"><span class=\"toc-item-num\">1.1.5.1&nbsp;&nbsp;</span>Polynomial Transformation 多项式变换</a></span></li><li><span><a href=\"#Custom-Transformation-自定义变换\" data-toc-modified-id=\"Custom-Transformation-自定义变换-1.1.5.2\"><span class=\"toc-item-num\">1.1.5.2&nbsp;&nbsp;</span>Custom Transformation 自定义变换</a></span></li></ul></li></ul></li><li><span><a href=\"#Static-Categorical-Variables-静态类别变量\" data-toc-modified-id=\"Static-Categorical-Variables-静态类别变量-1.2\"><span class=\"toc-item-num\">1.2&nbsp;&nbsp;</span>Static Categorical Variables 静态类别变量</a></span><ul class=\"toc-item\"><li><span><a href=\"#Ordinal-Encoding-序数编码\" data-toc-modified-id=\"Ordinal-Encoding-序数编码-1.2.1\"><span class=\"toc-item-num\">1.2.1&nbsp;&nbsp;</span>Ordinal Encoding 序数编码</a></span></li><li><span><a href=\"#One-hot-Encoding-独热编码\" data-toc-modified-id=\"One-hot-Encoding-独热编码-1.2.2\"><span class=\"toc-item-num\">1.2.2&nbsp;&nbsp;</span>One-hot Encoding 独热编码</a></span></li><li><span><a href=\"#Hashing-Encoding-哈希编码\" data-toc-modified-id=\"Hashing-Encoding-哈希编码-1.2.3\"><span class=\"toc-item-num\">1.2.3&nbsp;&nbsp;</span>Hashing Encoding 哈希编码</a></span></li><li><span><a href=\"#Helmert-Encoding-Helmert-编码\" data-toc-modified-id=\"Helmert-Encoding-Helmert-编码-1.2.4\"><span class=\"toc-item-num\">1.2.4&nbsp;&nbsp;</span>Helmert Encoding Helmert 编码</a></span></li><li><span><a href=\"#Sum-(Deviation)-Encoding--偏差编码\" data-toc-modified-id=\"Sum-(Deviation)-Encoding--偏差编码-1.2.5\"><span class=\"toc-item-num\">1.2.5&nbsp;&nbsp;</span>Sum (Deviation) Encoding  偏差编码</a></span></li><li><span><a href=\"#Target-Encoding-目标编码\" data-toc-modified-id=\"Target-Encoding-目标编码-1.2.6\"><span class=\"toc-item-num\">1.2.6&nbsp;&nbsp;</span>Target Encoding 目标编码</a></span></li><li><span><a href=\"#M-estimate-Encoding-M估计量编码\" data-toc-modified-id=\"M-estimate-Encoding-M估计量编码-1.2.7\"><span class=\"toc-item-num\">1.2.7&nbsp;&nbsp;</span>M-estimate Encoding M估计量编码</a></span></li><li><span><a href=\"#James-Stein-Encoder-James-Stein-编码\" data-toc-modified-id=\"James-Stein-Encoder-James-Stein-编码-1.2.8\"><span class=\"toc-item-num\">1.2.8&nbsp;&nbsp;</span>James-Stein Encoder James-Stein 编码</a></span></li><li><span><a href=\"#Weight-of-Evidence-Encoder-证据权重编码\" data-toc-modified-id=\"Weight-of-Evidence-Encoder-证据权重编码-1.2.9\"><span class=\"toc-item-num\">1.2.9&nbsp;&nbsp;</span>Weight of Evidence Encoder 证据权重编码</a></span></li><li><span><a href=\"#Leave-One-Out-Encoder-留一法编码\" data-toc-modified-id=\"Leave-One-Out-Encoder-留一法编码-1.2.10\"><span class=\"toc-item-num\">1.2.10&nbsp;&nbsp;</span>Leave One Out Encoder 留一法编码</a></span></li><li><span><a href=\"#Catboost-Encoder-Catboost-编码\" data-toc-modified-id=\"Catboost-Encoder-Catboost-编码-1.2.11\"><span class=\"toc-item-num\">1.2.11&nbsp;&nbsp;</span>Catboost Encoder Catboost 编码</a></span></li></ul></li><li><span><a href=\"#Time-Series-Variables-时间序列变量\" data-toc-modified-id=\"Time-Series-Variables-时间序列变量-1.3\"><span class=\"toc-item-num\">1.3&nbsp;&nbsp;</span>Time Series Variables 时间序列变量</a></span><ul class=\"toc-item\"><li><span><a href=\"#Time-Series-Categorical-Features-时间序列类别变量\" data-toc-modified-id=\"Time-Series-Categorical-Features-时间序列类别变量-1.3.1\"><span class=\"toc-item-num\">1.3.1&nbsp;&nbsp;</span>Time Series Categorical Features 时间序列类别变量</a></span></li><li><span><a href=\"#Time-Series-Continuous-Features-时间序列连续变量\" data-toc-modified-id=\"Time-Series-Continuous-Features-时间序列连续变量-1.3.2\"><span class=\"toc-item-num\">1.3.2&nbsp;&nbsp;</span>Time Series Continuous Features 时间序列连续变量</a></span></li><li><span><a href=\"#Implementation-代码实现\" data-toc-modified-id=\"Implementation-代码实现-1.3.3\"><span class=\"toc-item-num\">1.3.3&nbsp;&nbsp;</span>Implementation 代码实现</a></span><ul class=\"toc-item\"><li><span><a href=\"#Create-EntitySet-生成实体集\" data-toc-modified-id=\"Create-EntitySet-生成实体集-1.3.3.1\"><span class=\"toc-item-num\">1.3.3.1&nbsp;&nbsp;</span>Create EntitySet 生成实体集</a></span></li><li><span><a href=\"#Set-up-cut-time-设置时间截断\" data-toc-modified-id=\"Set-up-cut-time-设置时间截断-1.3.3.2\"><span class=\"toc-item-num\">1.3.3.2&nbsp;&nbsp;</span>Set up cut-time 设置时间截断</a></span></li><li><span><a href=\"#Auto-Feature-Engineering-自动特征工程\" data-toc-modified-id=\"Auto-Feature-Engineering-自动特征工程-1.3.3.3\"><span class=\"toc-item-num\">1.3.3.3&nbsp;&nbsp;</span>Auto Feature Engineering 自动特征工程</a></span></li></ul></li></ul></li></ul></li></ul></div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Data Prepocessing 数据预处理"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Static Continuous Variables 静态连续变量"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Discretization 离散化"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "离散化连续变量有时可以使模型更加稳健。例如，当预测客户的购买行为时，一个已有 30 次购买行为的客户可能与一个已有 32 次购买行为的客户具有非常相似的行为。有时特征中的过精度可能是噪声，这就是为什么在 LightGBM 中，模型采用直方图算法来防止过拟合。  \n",
    "\n",
    "离散连续变量有两种方法。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Binarization 二值化"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将数据二值化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:02.807384Z",
     "start_time": "2020-02-29T21:35:02.386476Z"
    }
   },
   "outputs": [],
   "source": [
    "# 导入数据\n",
    "from sklearn.datasets import fetch_california_housing\n",
    "dataset = fetch_california_housing()\n",
    "X, y = dataset.data, dataset.target "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:03.535474Z",
     "start_time": "2020-02-29T21:35:02.809454Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['font.sans-serif']=['SimHei']\n",
    "\n",
    "fig, ax = plt.subplots()\n",
    "sns.distplot(X[:,0], hist = True, kde=True) # 以第一个变量为例\n",
    "ax.set_title('分布直方图', fontsize=12)\n",
    "ax.set_xlabel('变量数值', fontsize=12)\n",
    "ax.set_ylabel('频率', fontsize=12); # 这个变量为长尾分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:03.541892Z",
     "start_time": "2020-02-29T21:35:03.537790Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import Binarizer\n",
    "\n",
    "sample_columns = X[0:10,0] # 选择前十个样本\n",
    "# 返回 array([8.3252, 8.3014, 7.2574, 5.6431, 3.8462, 4.0368, 3.6591, 3.12, 2.0804, 3.6912])\n",
    "\n",
    "model = Binarizer(threshold=6) # 不妨将6设为阈值\n",
    "# 若数值 <= 6, 则返回 0， 否则返回 1\n",
    "result = model.fit_transform(sample_columns.reshape(-1,1)).reshape(-1)\n",
    "# 返回 array([1., 1., 1., 0., 0., 0., 0., 0., 0., 0.])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Binning 分箱"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将数值特征分箱离散化"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 等距分箱"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:03.552299Z",
     "start_time": "2020-02-29T21:35:03.544357Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import KBinsDiscretizer\n",
    "\n",
    "# 为了模拟数据科学家的实际操作，我们将\n",
    "# 在训练集上训练 KBinsDiscretizer然后转换测试集\n",
    "# 将第一列中的前十个样本作为测试集\n",
    "# 将第一列中的其余样本作为训练集\n",
    "\n",
    "test_set = X[0:10,0]\n",
    "# 返回 array([8.3252, 8.3014, 7.2574, 5.6431, 3.8462, 4.0368, 3.6591, 3.12, 2.0804, 3.6912])\n",
    "train_set = X[10:,0]\n",
    "\n",
    "model = KBinsDiscretizer(n_bins=5, encode='ordinal', strategy='uniform') # 设置5个箱\n",
    "\n",
    "model.fit(train_set.reshape(-1,1)) # 在训练集上训练\n",
    "transformed_train = model.transform(train_set.reshape(-1,1)).reshape(-1) # 转换训练集\n",
    "transformed_test = model.transform(test_set.reshape(-1,1)).reshape(-1) # 转换测试集\n",
    "\n",
    "# 以测试集结果为例：\n",
    "# 返回测试集的箱序数： transformed_test = array([2., 2., 2., 1., 1., 1., 1., 0., 0., 1.])\n",
    "bin_edge = model.bin_edges_[0]\n",
    "# 返回分箱区别 array([ 0.4999 ,  3.39994,  6.29998,  9.20002, 12.10006, 15.0001 ])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:03.929568Z",
     "start_time": "2020-02-29T21:35:03.554061Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化分箱\n",
    "fig, ax = plt.subplots()\n",
    "sns.distplot(train_set, hist = True, kde=True)\n",
    "\n",
    "for edge in bin_edge: # 等距\n",
    "    line = plt.axvline(edge, color='b')\n",
    "ax.legend([line], ['等距分箱间距'], fontsize=10)\n",
    "ax.set_title('分布直方图', fontsize=12)\n",
    "ax.set_xlabel('变量数值', fontsize=12)\n",
    "ax.set_ylabel('频率', fontsize=12); "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-01-05T04:05:57.799444Z",
     "start_time": "2020-01-05T04:05:57.793970Z"
    }
   },
   "source": [
    "##### 分位数分箱"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:03.940207Z",
     "start_time": "2020-02-29T21:35:03.931681Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import KBinsDiscretizer\n",
    "\n",
    "# 为了模拟数据科学家的实际操作，我们将\n",
    "# 在训练集上训练 KBinsDiscretizer然后转换测试集\n",
    "# 将第一列中的前十个样本作为测试集\n",
    "# 将第一列中的其余样本作为训练集\n",
    "\n",
    "test_set = X[0:10,0]\n",
    "# 返回 array([8.3252, 8.3014, 7.2574, 5.6431, 3.8462, 4.0368, 3.6591, 3.12, 2.0804, 3.6912])\n",
    "train_set = X[10:,0]\n",
    "\n",
    "model = KBinsDiscretizer(n_bins=5, encode='ordinal', strategy='quantile') # 设置5个箱，基于分位数分箱\n",
    "\n",
    "model.fit(train_set.reshape(-1,1))\n",
    "transformed_train = model.transform(train_set.reshape(-1,1)).reshape(-1) # 转换训练集\n",
    "transformed_test = model.transform(test_set.reshape(-1,1)).reshape(-1) # 转换测试集\n",
    "\n",
    "# 以测试集结果为例：\n",
    "# 返回测试集分箱序数结果 array([4., 4., 4., 4., 2., 3., 2., 1., 0., 2.])\n",
    "bin_edge = model.bin_edges_[0]\n",
    "# 返回分箱区间 transformed_test = array([ 0.4999 ,  2.3523 ,  3.1406 ,  3.9667 ,  5.10824, 15.0001 ])\n",
    "# 2.3523 是 20% 分位数\n",
    "# 3.1406 是 40% 分位数, etc.."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:04.302706Z",
     "start_time": "2020-02-29T21:35:03.942333Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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t99+O9dccw1//OMfAYiLi+fOO+9kw4YNXH/99Zx//vnMnTuXuXPnkpKSQnl5OQBTp07lqquuYuLEiSxZsoRhw4Zx0UUXtV7++te/dhrrsbIObmNMr1q4cCHr1q1j+/bt/PnPfwagpKSEf/3rX2RnZ3P55Zdzxx13cMcddwDw6KOPkpyczA033NDh+XJycvj1r3/NF7/4RU455RQuueQSzjnnHKKjo1vL7N69m3feeYdHH30UVWXq1Km88sorzJw5s/XbeXV1NYmJiSxfvpyCggLy8vLIyckhLi4Or9eL3+8HwBPoaV69ejX33XcfAIsXLyY2NpatW7cCMHr0aCIjI3sU36pVq1iwYAGbN2/m2muv5f33329NGP/85z+56KKLOOuss9izp5myshIefvhhBg8e3FrDaDFnzpzW5xwzZgyvvvoqd955JwkJCcybN6814QSLJQtjTK+66aab+PDDD7n++utbm0OKior4xje+cUznW7BgAQ8++CAiQmZmJtdeey3z58/npZdeah0K+uijj3LppZfy0ksv8cwzz7S20c+dOxdV5dFHH2XQoEEUFxfz2GOPMXXqVGbNmsVjjz3Gzp07Ofvss9m5cyevv/4606dPJy0tjZNPPplp06Zx6aWXsnbtWhITE3nooYf4+OOP+etf/8rEiRN7FN/gwYN55ZVX+N3vfsd9991HXl4eQ4cOZfPmzfh8Pj7++GPmzp1LTU0lt99+FWvWLPtUbeett94CDvc91NTUsG7dOgoKCvqsn8qSRT/UWTPSF04f0ceRGLd84xuwbl3vnnPqVHj00Z6Xz87OZk5gwaO9e/e23v/II4/w2muvERHhfPzk5uYSERHR+s24sbGRG2+8kS9/+cs88sgjJCcnc8EFF7Qef/vtt3PgwAHOPPNMfv/73xMVFcXzzz/PggULmD9/PhEREVxzzTUAPPjgg3zuc59j9OjR5OXlsXfvXr71rW+xbds28vLy2LBhAw888ABjx47liSee4LTTTgNg2rRpvPPOOyxdupTHH3+cIUOG8Itf/ILExES+/vWvExUV1fpauosvKyuLnJwclixZwsUXX8zGjRtJSkpi7ty5AFx//fXcddddREZGERHhJL+mpibeeecdwKlRtLxXLS666CJuu+02TjrpJBITE1m0aFHr+fbt28f27dt7/h/VQ5YsjDG95rXXXuOXv/wl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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化分箱\n",
    "fig, ax = plt.subplots()\n",
    "sns.distplot(train_set, hist = True, kde=True)\n",
    "\n",
    "for edge in bin_edge: # quantile based bins\n",
    "    line = plt.axvline(edge, color='b')\n",
    "ax.legend([line], ['基于分位数的分箱间距'], fontsize=10)\n",
    "ax.set_title('分布直方图', fontsize=12)\n",
    "ax.set_xlabel('变量数值', fontsize=12)\n",
    "ax.set_ylabel('频率', fontsize=12); "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Scaling 缩放"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "cell_style": "center"
   },
   "source": [
    "在线性回归，逻辑回归等线性模型中，不同尺度的特征之间难以比较。在基于欧氏距离的 k-means 聚类或 KNN 模型中，特征的不同尺度也会影响到距离测算。缩放可以有效的解决以上的问题，让变量之间可比性增强。而对于基于梯度下降的算法，数据缩放也会有效的特征运行速度。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "cell_style": "center"
   },
   "source": [
    "**一些常用模型的分类**\n",
    "  \n",
    "|模型名称 | 是否需要缩放 |\n",
    "|--|--|\n",
    "| 向量支持机, K最近邻算法, 主成分分析, K均值聚类, 线性回归, 逻辑回归, 线性判别分析| $\\checkmark$ |\n",
    "| 朴素贝叶斯, 基于树的机器学习算法 | $\\times$ |\n",
    "\n",
    "* 注：偏度影响也会PCA 模型，因此有些人推荐使用幂变换来消除偏度。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Stardard Scaling 标准缩放（Z 分数标准化）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-01-05T17:59:35.668652Z",
     "start_time": "2020-01-05T17:59:35.663440Z"
    }
   },
   "source": [
    "公式: ${X}' = \\frac{X - \\mu }{\\sigma}$  \n",
    "$\\mu$ 是X的均值， $\\sigma$ 是X的标准差  \n",
    "这种缩放方法对异常值较敏感，异常值会同时影响$\\mu$ 和 $\\sigma$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:04.311438Z",
     "start_time": "2020-02-29T21:35:04.305317Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "# 为了模拟数据科学家的实际操作，我们将\n",
    "# 在训练集上训练 StandardScaler然后转换测试集\n",
    "# 将第一列中的前十个样本作为测试集\n",
    "# 将第一列中的其余样本作为训练集\n",
    "\n",
    "test_set = X[0:10,0]\n",
    "# 返回 array([8.3252, 8.3014, 7.2574, 5.6431, 3.8462, 4.0368, 3.6591, 3.12, 2.0804, 3.6912])\n",
    "train_set = X[10:,0]\n",
    "\n",
    "model = StandardScaler()\n",
    "\n",
    "model.fit(train_set.reshape(-1,1)) # 在训练集上训练\n",
    "# 转换训练集与测试集\n",
    "transformed_train = model.transform(train_set.reshape(-1,1)).reshape(-1) # 转换训练集\n",
    "transformed_test = model.transform(test_set.reshape(-1,1)).reshape(-1) # 转换测试集\n",
    "\n",
    "# 以测试集结果为例：\n",
    "# 返回测试集的缩放结果 transformed_test = array([ 2.34539745,  2.33286782,  1.78324852,  0.93339178, -0.0125957 ,\n",
    "# 0.08774668, -0.11109548, -0.39490751, -0.94221041, -0.09419626])\n",
    "# 返回结果与以下代码的返回结果一致 ((X[0:10,0] - X[10:,0].mean())/X[10:,0].std())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:04.917421Z",
     "start_time": "2020-02-29T21:35:04.314055Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 936x648 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化缩放前后的分布对比\n",
    "# 在整个变量上操作（不分训练集与测试集）\n",
    "\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "fig, ax = plt.subplots(2,1, figsize = (13,9))\n",
    "sns.distplot(X[:,0], hist = True, kde=True, ax=ax[0])\n",
    "ax[0].set_title('原分布直方图', fontsize=12)\n",
    "ax[0].set_xlabel('变量数值', fontsize=12)\n",
    "ax[0].set_ylabel('频率', fontsize=12); # 这个变量为长尾分布\n",
    "\n",
    "model = StandardScaler()\n",
    "model.fit(X[:,0].reshape(-1,1)) \n",
    "result = model.transform(X[:,0].reshape(-1,1)).reshape(-1)\n",
    "\n",
    "# 可视化整个变量上缩放的结果\n",
    "sns.distplot(result, hist = True, kde=True, ax=ax[1])\n",
    "ax[1].set_title('变换后的分布直方图', fontsize=12)\n",
    "ax[1].set_xlabel('变量数值', fontsize=12)\n",
    "ax[1].set_ylabel('频率', fontsize=12); # 分布一致，但是变量的尺度已发生变化\n",
    "fig.tight_layout()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### MinMaxScaler 最大最小缩放 (按数值范围缩放)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "假设我们想要将特征数值缩放到 (a, b)区间  \n",
    "公式：${X}' = \\frac{X - Min }{Max - Min} * (b - a) + a$   \n",
    "$Min$ 是X中的最小值， $Max$ 是X中的最大值  \n",
    "这种缩放方法同样对异常值较敏感，异常值会同时影响$Min$ 和 $Max$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:04.925216Z",
     "start_time": "2020-02-29T21:35:04.919252Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import MinMaxScaler\n",
    "\n",
    "# 为了模拟数据科学家的实际操作，我们将\n",
    "# 在训练集上训练 MinMaxScaler然后转换测试集\n",
    "# 将第一列中的前十个样本作为测试集\n",
    "# 将第一列中的其余样本作为训练集\n",
    "\n",
    "test_set = X[0:10,0]\n",
    "# 返回 array([8.3252, 8.3014, 7.2574, 5.6431, 3.8462, 4.0368, 3.6591, 3.12, 2.0804, 3.6912])\n",
    "train_set = X[10:,0]\n",
    "\n",
    "model = MinMaxScaler(feature_range=(0,1)) # 将缩放区间定为 (0,1)\n",
    "\n",
    "model.fit(train_set.reshape(-1,1)) # 在训练集上训练\n",
    "# 转换缩放训练集与测试集\n",
    "transformed_train = model.transform(train_set.reshape(-1,1)).reshape(-1) # 转换训练集\n",
    "transformed_test = model.transform(test_set.reshape(-1,1)).reshape(-1) # 转换测试集\n",
    "\n",
    "# 以测试集结果为例：\n",
    "# transformed_test = array([0.53966842, 0.53802706, 0.46602805, 0.35469856, 0.23077613,\n",
    "# 0.24392077, 0.21787286, 0.18069406, 0.1089985 , 0.22008662])\n",
    "# 返回结果与以下代码的返回结果一致： (X[0:10,0] - X[10:,0].min())/(X[10:,0].max()-X[10:,0].min())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:05.583315Z",
     "start_time": "2020-02-29T21:35:04.927386Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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KeP840YQ09xQEREREeklKkBFBrF9za387NkN/PTZdTS3prhq7gRuOHcqJXmZh30sM+OEMYVMHZ7Hwyu288zaSmoaWrjslLEakisiIiIivUIFqMgglHLnNy9t5vtPrGVnbRMXHj+SL180g0mluUd97KxknA+eHCxI9PgbO2hqTXHF6eNIxnXVJhERERE5OipARQaRlrYUr2+r4Zm1O9lR08TJ44v4ycdO4bSJw3r1dcyM+dOHk5mI8eBr2/nVoo18fO6EXn0NEREREUk/KkBFBoEdNY0s2biHVzZX0dDSRkluBn89ezwnjC5g7Y461u6o65PXnTellMxknPte3srPn9/AZSePpTAn2SevJSIiIiJDnwpQkQGquTXFivJqlmzcw+Y9+4ibcdzoAk6fOIzJZbn9tjjQKeOLyUrEuGfJFq64dRG/+vRshudn9ctri4iIiMjQogJUZIBpaUvx4vrdPLO2kvrmNkrzMrjohJGcPL6YvMxofmWPG13IJ+bFuXPxRi76wXNcc9YkinMyerz/lXPG92E6ERERERksVICKDBCtbSle2riHZ9ZUUtvUytSyPOZPL2NSaS42AC6FMnV4Hp8+cxK/WLSRW59dzzVnTqIs//BX2xURERGR9KUCVCRirakUyzbtZeGaSqobWphYkssVs8cxuTQv6mjvML4kl79512R+/sJGbn12HZ86cxKji7KjjiUiIiIig4SuqyASoU276/mfp97ij8u3UZid5JozJ/E375o0IIvPdqMKs7n+7Mkk4zFue349m3bXRx1JRERERAYJFaAiEVmxtZoP3fIX6ptauXruBK4/ezJTh+cNiOG2h1Kal8l1Z08mLzPBz1/YwJs7aqOOJCIiIiKDgApQkQg892YlH711EZmJONe/ezIzRhUMisKzo6KcDK47ewqleZn8atEmVpZXRx1JRERERAY4FaAi/eyBV8r51B1LGDcsh/s+d8agvqRJXmaCa8+azNjibO55aTOvbN4bdSQRERERGcAiKUDNbJiZnW9mpVG8vkhUfvbsev7ut8s5dUIxv71+HiMKBm/x2S47I86nzpzEpLJcfr9sKy+rCBURERGRbvR7AWpmxcCfgdnAAjMr66JNwsw2m9nC8Gtmf+cU6U3uzr899Ab/9vAqLp45kl9eM5vC7GTUsXpNRiLG1XMnMqUsjz8s28rLm1SEioiIiMg7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\n",
      "text/plain": [
       "<Figure size 936x648 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化缩放前后的分布对比\n",
    "# 在整个变量上操作（不分训练集与测试集）\n",
    "\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "fig, ax = plt.subplots(2,1, figsize = (13,9))\n",
    "sns.distplot(X[:,0], hist = True, kde=True, ax=ax[0])\n",
    "ax[0].set_title('原分布直方图', fontsize=12)\n",
    "ax[0].set_xlabel('变量数值', fontsize=12)\n",
    "ax[0].set_ylabel('频率', fontsize=12); # 这个变量为长尾分布\n",
    "\n",
    "model = MinMaxScaler(feature_range=(0,1))\n",
    "model.fit(X[:,0].reshape(-1,1)) \n",
    "result = model.transform(X[:,0].reshape(-1,1)).reshape(-1)\n",
    "\n",
    "# 可视化整个变量上缩放的结果\n",
    "sns.distplot(result, hist = True, kde=True, ax=ax[1])\n",
    "ax[1].set_title('变换后的分布直方图', fontsize=12)\n",
    "ax[1].set_xlabel('变量数值', fontsize=12)\n",
    "ax[1].set_ylabel('频率', fontsize=12); # 分布一致，但是变量的尺度已发生变化\n",
    "fig.tight_layout() # 现变量分布于（0，1）区间"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### RobustScaler 稳健缩放 (抗异常值缩放)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-26T18:42:09.601048Z",
     "start_time": "2020-02-26T18:42:09.597399Z"
    }
   },
   "source": [
    "使用对异常值稳健的统计（分位数）来缩放特征   \n",
    "假设我们要将缩放的特征分位数范围为 (a, b)  \n",
    "公式：${X}' = \\frac{X - Median}{X.quantile(b) - X.quantile(a)}$   \n",
    "这种方法对异常点鲁棒性更强"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:05.592310Z",
     "start_time": "2020-02-29T21:35:05.585213Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from sklearn.preprocessing import RobustScaler\n",
    "\n",
    "# 为了模拟数据科学家的实际操作，我们将\n",
    "# 在训练集上训练 RobustScaler然后转换测试集\n",
    "# 将第一列中的前十个样本作为测试集\n",
    "# 将第一列中的其余样本作为训练集\n",
    "\n",
    "test_set = X[0:10,0]\n",
    "# 返回 array([8.3252, 8.3014, 7.2574, 5.6431, 3.8462, 4.0368, 3.6591, 3.12, 2.0804, 3.6912])\n",
    "train_set = X[10:,0]\n",
    "\n",
    "model = RobustScaler(with_centering = True, with_scaling = True, \n",
    "                    quantile_range = (25.0, 75.0))\n",
    "# with_centering = True => 中心归零，变量X将会变为：X - X.median()\n",
    "# with_centering = True => 数值标准化，变量X将会除以变量分位数区间（区间由用户设定）\n",
    "\n",
    "# 不妨将变量分位数区间设置为(25%, 75%)\n",
    "\n",
    "model.fit(train_set.reshape(-1,1)) # 在训练集上训练\n",
    "# 转换缩放训练集与测试集\n",
    "transformed_train = model.transform(train_set.reshape(-1,1)).reshape(-1) # 转换训练集\n",
    "transformed_test = model.transform(test_set.reshape(-1,1)).reshape(-1) # 转换测试集\n",
    "\n",
    "# 以测试集结果为例：\n",
    "# transformed_test =  array([ 2.19755974,  2.18664281,  1.7077657 ,  0.96729508,  0.14306683,\n",
    "# 0.23049401,  0.05724508, -0.19003715, -0.66689601,  0.07196918])\n",
    "# 返回结果与以下代码的返回结果一致： (X[0:10,0] - np.quantile(X[10:,0], 0.5))/(np.quantile(X[10:,0],0.75)-np.quantile(X[10:,0], 0.25))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:06.187645Z",
     "start_time": "2020-02-29T21:35:05.594049Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA6AAAAKACAYAAACCHhUzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3Xl8ldWB//HvuUtu9j2EBBKSQNhkEyPIZsGqda1Wq9a1rVur1bYz02mnnXZmukx/3cZap7ajVeuKilq11n0BRHYQkDUQIATIvpF9u/f8/ki0kQYSIDdPkvt5v155cZfnufeLr6j3e895zjHWWgEAAAAAEGwupwMAAAAAAEIDBRQAAAAAMCAooAAAAACAAUEBBQAAAAAMCAooAAAAAGBAUEABADgOY4ynh8cmdv2ZY4w5pw+v4TLGLDfGjDmB9400xrj7eKzLGLOwr68NAIBT/uF/qgAAhApjTK6kLZJ2dHvYK6m92/1CSV/sds7Fkn5pjJkqyUp60BgzzVrbdJy3ulBSpLX2wHGyvC0pttt750pqMsYc7parxFp7eQ+nR0p6xhjzeWvtumO8/ofq/P9+23FyZlhrU4/zPAAAp8SwDygAIFQZY7IkvWStndF13ytpl6Qp1trmHo53SVoj6b+ttS93PXafpHBr7e3djpsj6WlJDZI6JI2XVCKpvvvLqbMQfsNau6yH93pD0n9aa9ceI4fHWtvW7bHrJJVZa9/t9phHUsBaGzDGrJV0jbW20BgzV9KPJF1kuz4IdB1baK0dffx/agAAnDwKKAAgZH1cQCXNk1Qsaas+PQI6WdKZ1tq9Xcd/V9J51trzur1GtDpL6ZuSvmOP+h+rMeZaSTdba88zxjwk6ZvHGi01xtwk6Z+77uZKKpLU2nX/cWvtPV3HzZb0pCS/Okc/EyQd1j9yS7rCWrvVGPOBpBsk1UhaJenjgj1R0vckPSCpwFqbdYx/XAAAnDKm4AIA0FnyWiT94qjH71NnyZMx5rOSvq3OsvoJa21D13Wgb0t63xhzq7U2v+ucLEk/lfRxYV2kzmm7xxIvaYmkXx31+E3qHEX9+D3XqrOgyhhzrqTbrbVX9+Hv6Zb0iqRqSSvUWZxvlfRHsS4EAGAAUEABAKEu0PWnkRR+1HNGkowxMZIeVOe01dXGmIiu5+q6jktUZzk9U38vrGmSXpU0RtKLxhhJGi1pjTHGSsqUdKO19tWjstwu6aKjcoxQZzHtSZSkzxljdh31eIG19pKjHvNLultSpaQPujJf3DVFlwIKAAg6CigAIJTFq7NE+iTFSfq3o55PleSz1tYbYyZ1XXP5sDHmV5IOW2t/J31yveYua+2DXfenS/qLpN9J+m63a0wLJM221rYYYx5VzwsCbVLndN7u5hzn75Ap6TfW2p9+/IAxZr6kH/dwbIak/+q6vVjSSklfM8Y8KOmu47wHAAD9gm87AQChLFdSkbW2UVK6Okcwf6/O0cF5khI/nk7bfcEfSZ+R1H1xoFGSDnW7f0TSD6y19/Xy/j1Nx62SVHDUT9lxXuNcScuPemykOhc9OtpBdU7nPVdSvqSfS3pfUp6kZb1kBQDglDECCgAIZZ+V9IExxifpDUk/6PbcpZK+ZYy51Fpb+/GDxpjLJLmttWu6HZumbosAWWsL1bl9i9TDl73GmDBJSepcIfdoF0iacdRjSZKe6uF1zlHnFN8VRz2Vqk8XYqlrOrG19rAx5nuSrpT0gqTl1tojXavgmh7yAADQbxgBBQCEJGNMkqQr1Dna+bY6V8PdqM5pqtZa+7w6r7t81XRdwNlVPv8g6Y6u+7FdW5q0WGtb//FdJHVO7/2YR52r7Oarc+rsR12v4+naAkaSfm+tzev+o67ptF3Hebpuj5P0iKTbum2lEm2MyZT0BXWOnHb38evLWvtLSZeoc5uYCUflAwAgaNiGBQAQkrr26rxU0g8lnWutfcsYc406Fxr6V2vt613H5Vhr9xljfqfOqas3WWs3dj33XXVOaf2VtfbxY7yP7+Nyaow5LGmKpAZrbXu3Y66U9J/q+ZrQ7rySfiPpNXVOu73bWru02+vcq87y+Z6kb1lr67o996E6F1k63nukWWtTe8kAAMBJo4ACANAHXSvhtnQvjk4yxoQddV1qb8cnSaq11vqDGAsAgOOigAIAAAAABgTXgAIAAAAABgQFFAAAAAAwICigAAAAAIABMWyWW09OTrZZWVlOxwAAAACAkLNx48ZKa21Kb8cNmwKalZWlDRs2OB0DAAAAAEKOMeZAX45jCi4AAAAAYEBQQAEAAAAAA4ICCgAAAAAYEBRQAAAAAMCAoIACAAAAAAYEBRQAAAAAMCAooAAAAACAAUEBBQAAAAAMCAooAAAAAGBAUEABAAAAAAPC43QAAANv8dqikzrvutmZ/ZwEAAAAoYQRUAAAAADAgKCAAgAAAAAGBAUUAAAAADAguAYUcBjXYwIAACBUMAIKAAAAABgQjIACIaCoqkmVja1q6wio3R/QrtI6dfit/NYqMyFSCVFhTkcEAABACKCAAsNYUVWTfvnmLr36Uckxj/G4jM6ZOEILclPkdpkBTAcAAIBQQwEFhqGaxjb9fmmBHl9dKI/LpbvPGaeZYxLkc7vk9bj03s5yedxGASstyy/XWzvKtOVQrb5w+mhlJkY6HR8AAADDFAUUGEZa2v16bFWh7l9aoIbWDl11Rob++fzxSo0N/9Rxe8oaPrl9/ewx2llSp79uKdYDy/dqdk6izp88UuFe90DHBwAAwDBHAQWGgUDA6pWPivWrN/J1uLZZCyek6PsXTtKEkTF9On9SWqxykqP01s4yrdlbpR3Fdbp8xihNTIsNcnIAAACEEgooMMSt3luln7+2U1sPH9HktFj96ovTNG9c8gm/js/r1qXT0jVjdLxe3HRYT6w5oM/PSNfs7KQgpAYAAEAoooACQ9Sesnr94vVdendXudLjwnXP1dN1+YxRcp3iQkIZiZG6Y+FYLV5bpJc3F6u1PaCzx6f0U2oAAACEMgooMMTUNLVpWX6FfvjSVkWFefS9Cybqq/Oy+vWaTa/bpRvOGqPnNh7UG9tL1dzu1/mTU/vt9QEAABCaKKDAEOAPWO0sqdP6wmoVlDfIGGl2TpLOmTBCUT6P/vLh4X5/T7fL6Oq8DIV73Fq+u0It7X5dOyvzlEdYAQAAELoooMAgVtnQqg2F1dpYVKvG1g7FRXi1aOII5Y1JUHxkWNDf32WMLpuRrnCvS+/vqdQ/Ldms31w1XV63K+jvDQAAgOEn6AXUGPOwpMmSXrXW/qyH5+MkPSPJLalR0jWSApL2df1I0t3W2q3BzgoMFkXVTXp3Z5n2lDfIZaQJI2N1ZlaCxqfGyGUGdgTSGKMLpqQpwuvWy5uLlV9ar2tnZZ5QCb1udmYQEwIAAGCoCGoBNcZcIcltrZ1jjHnEGJNrrd1z1GHXS7rHWvu2MeaPki6QdEjS09ba7wUzHzDYHK5p1js7y5RfVq/IMLfOnZSqvKwExYZ7nY6mz0wYIZ/Xrb9uKdZjqwp141lj5GOvUAAAAJyAYI+ALpS0pOv2W5LmS/pUAbXW/qHb3RRJ5ZLOknSJMWaRpK2Svmat7QhyVsAxJUea9c7Ocu0sqVOE163zJ6dqztgk+TyDq+CdlZMkn8elFz48pIdX7tdX5mQp0sdMfgAAAPRNsD85Rkn6eHWUakkzj3WgMWaOpARr7RpjjF/SudbaEmPM45IukvTXHs65XdLtkpSZyRQ/DD3NbX4t2XBQmw/WKtzr0rmTRmju2OR+XdG2v52emaBwr1tPryvSgyv26eZ52YqNcH6EFgAAAINfsFcSaZAU0XU7+ljvZ4xJlPS/km7ueugja21J1+0NknJ7Os9a+6C1Ns9am5eSwj6FGFpqGtt03UNrtOVgrT4zPkX/ev5EnTMxdVCXz49NSovVl+dmqbapXQ+u2KfqxjanIwEAAGAICHYB3ajOabeSNF1S4dEHGGPCJD0n6fvW2gNdDz9hjJlujHFLulzSliDnBAbUoZomXfl/q7S9uE7Xzc7U504bqYiwwV88uxubEq1b5meruc2vB9/fq7K6FqcjAQAAYJALdgF9SdKNxph7JF0tabsx5uiVcG9R59TcfzfGLDPGXCPpJ5KekLRZ0mpr7TtBzgkMmB3FdbriD6tUWd+qp26drdPS45yOdNIyEiN129k5spL+tGKfDtc2Ox0JAAAAg5ix1gb3DYxJkHSepPettaXBep+8vDy7YcOGYL080C9W7a3U1x7fqCifR4/dPEsTRsZo8doip2OdsqqGVj28cr9a2v26ZV6ORiVEfOp5tmEBAAAY3owxG621eb0dF/Td5K21NdbaJcEsn8BQ8LePivWVR9ZrZFy4/nLnXE0YGeN0pH6TFO3TbfNzFOF16+GV+3SopsnpSAAAABiEgl5AAUjLd1fo7qc3aXpGnJ77+hylx0f0ftIQkxAVplsXdJbQR1bu18FqSigAAAA+jQIKBFlZXYv++dnNGj8iRo/fPFvxkWFORwqahMgw3bYgR5FhHj2ycr+KKKEAAADohgIKBJE/YPXNpzepqc2v+68/fcitdHsy4rtKaJTPoz+v3K+iqkanIwEAAGCQoIACQXTfu3u0dn+1fnr5FI0bMXyu+exNXIRXty3IUbTPo0dWFWrjgWqnIwEAAGAQoIACQbKqoFL3vbdHV8wcpS+eMdrpOAPu4xIa4/PoK39erx3FdU5HAgAAgMMooEAQVNS36lvPblZOcpR+etkUp+M4JjbCq1vmZyvG59FNj6zVvooGpyMBAADAQRRQoJ8FAlb/vGSz6prb9fvrZirK53E6kqPiI8P0xK2zZa1048PrVFzb7HQkAAAAOIQCCvSzPy7fqxV7KvWfl56mSWmxTscZFMamROuxm2eprrldNzy8VlUNrU5HAgAAgANCe2gG6Gebimr0P2/l69Lp6bp2VobTcQaVKaPi9MhXz9SND6/VTY+s09O3n6XYcG+v5y1eW3RS73fd7MyTOg8AAADBwwgo0E+stfrJ33YoJcann39hiowxTkcadM7MStT/3XCGdpfV69ZHN6i5ze90JAAAAAwgCijQT97YVqpNRbX6p3PHK6YPI3uhauGEEfrtNTO0/kC17nhqo9o6Ak5HAgAAwAChgAL9oN0f0K/ezFfuiOiQ3HLlRF0yLV0//8JULcuv0D8v2Sx/wDodCQAAAAOAa0CBfvDMuiLtr2zUw1/Ok8fN9zp9ce2sTNW3tOvnr+1STLhHP//CVKYtAwAADHMUUOAUNbR26N539mhWdqLOmTjC6ThDyu1nj9WR5nbdv3SvYiO8+v6Fk5yOBAAAgCCigAKn6MH396mqsU1XZybo6XUHnY4z5Hzn/Amqa+7QA8v3KS7CqzsXjnM6EgAAAIKEAgqcgvK6Fv3p/X2aOipOGYmRTscZkowx+vHnT1NdS7t+9Ua+YsK9uvGsMU7HAgAAQBBQQIFTcO+7e9TuD+j8yalORxnSXC6j31w1XY2tHfqPl7cpNtyjy2aMcjoWAAAA+hkFFOhm8dqiPh9bXteiZ9YVaXZ2kpKifUFMFRq8bpd+f91MfeXP6/Sd57YoLS5Cs7ITnY4FAACAfsRyncBJenNHmbxulxax8FC/Cfe69cCNecpIjNTXn9yog9VNTkcCAABAP6KAAiehsLJRO0vqdPb4FEX7mEjQn+IivHropjx1+AO67fENam33Ox0JAAAA/YQCCpyEpfnlivF5NG9sstNRhqWclGjdf/1M7Slv0JKNhxSw1ulIAAAA6AcUUOAEVdS3ak95g2bnJCrMw79CwbIgN0U/vHiSdpbU6Z2dZU7HAQAAQD/g0zNwgtbsr5LbGJ2ZxQI5wfaVuVnKG5OgZfkV2nKo1uk4AAAAOEUUUOAEtLb79eGBGk0dHaeYcK/TcYY9Y4w+PyNdWUmRemHjIR2qYVEiAACAoYwCCpyATQdr1doR0Fk5SU5HCRkel0vXzR6j6HCPnlxzQI2tHU5HAgAAwEmigAJ9ZK3Vmn1VGhUfoYyECKfjhJRon0c3zB6jhtYOvbGt1Ok4AAAAOEkUUKCP9lU2qry+VXNykmSMcTpOyEmPj9D8ccnaWFSjwspGp+MAAADgJFBAgT5avbdKkWFuTR0d53SUkHXOxFTFR3j18pbD8gfYmgUAAGCooYACfVDb1KadJXU6MytRXjf/2jglzOPSpdPTVVbXqpUFlU7HAQAAwAnikzTQB2v3V0uSZmWz9YrTJqXFatLIGL27q0y1TW1OxwEAAMAJ8DgdABjs2v0BrS+s1qS0WCVEhjkdZ0havLaoX1/vkunpuved3frbRyW64awx/fraAAAACB5GQIFebD10RE1tfs0Zy9Yrg0VCZJjOmZiqHSV12llS53QcAAAA9BEFFDgOa61W76tSSoxPOclRTsdBN/PGJWlEjE+vfFSsto6A03EAAADQBxRQ4DgO1TTrcG0zW68MQh6XS5fNGKXapnYtzS93Og4AAAD6gAIKHMfqfVXyeVw6PSPe6SjoQXZylGZmxmvFngqV17U4HQcAAAC9oIACx9DS7te2w0c0IyNePq/b6Tg4hgumpMnrdundXYyCAgAADHYUUOAYthfXqSNgdXpmgtNRcBzRPo/OyknStsNHVF7PKCgAAMBgRgEFjmHzwRolRoUpIyHC6SjoxbxxyfK4jZbnVzgdBQAAAMcR9AJqjHnYGLPaGPPDYzwfZ4x53RjzljHmRWNMWF/OA4LpSHO79lU0akZGPIsPDQHRPo9mZydpy6FaVTW0Oh0HAAAAxxDUAmqMuUKS21o7R1KOMSa3h8Oul3SPtfZ8SaWSLujjeUDQfHSoVlbSDBYfGjLm5ybLZYyW72YUFAAAYLAK9gjoQklLum6/JWn+0QdYa/9grX27626KpPK+nCdJxpjbjTEbjDEbKir40In+s/lgrUYnRCg52ud0FPRRbLhXeVmJ+rCoRjVNbU7HAQAAQA+CXUCjJB3uul0tKfVYBxpj5khKsNau6et51toHrbV51tq8lJSU/kuNkFZa16KSIy2Mfg5BZ+cmy8jofUZBAQAABqVgF9AGSR+v4BJ9rPczxiRK+l9JN5/IeUAwbDlYK5eRpo2mgA418ZFhmjkmXhsP1KiMfUEBAAAGnWAXu436+/TZ6ZIKjz6ga9Gh5yR931p7oK/nAcEQsFabD9Yqd0SMon0ep+PgJHxm/AgFrNUDy/c5HQUAAABHCXYBfUnSjcaYeyRdLWm7MeZnRx1zi6SZkv7dGLPMGHNND+e9GuScgCSpsKpRR5rbmX47hCVGhWlGRrwWrzugSlbEBQAAGFSCWkCttXXqXFBojaRF1tot1tofHnXMH621CdbahV0/z/Zw3pFg5gQ+trmoVmEelyalxTodBadg4fgRausI6E8rGAUFAAAYTIJ+baW1tsZau8RaWzoQ5wEnq6Xdr23FR3RaWqzCPFx2PJQlx/h0ybR0PbH6gGoaWREXAABgsOBTNtBl6a5ytbQHmH47TNx1zjg1tfn1yMr9TkcBAABAFwoo0OWlzYcV4/MoJyXa6SjoB+NTY3ThlJF6dGWhjjS3Ox0HAAAAooACkqTapjYt3VWhaaPj5HYZp+Ogn3xj0TjVt3bo8VWFTkcBAACAKKCAJOm1raVq8wc0IzPB6SjoR1NGxemzE0fo4ZX71dDa4XQcAACAkEcBBSS9tOmwxo2IVnpcuNNR0M/u/myuapva9eSaA70fDAAAgKCigCLkFdc2a11htS6fkS5jmH473MzIiNeC3GQ9tGKfmtv8TscBAAAIaRRQhLzXt3Xu9HPxtHSHkyBYvvnZXFU2tGnxuiKnowAAAIQ0CihC3utbSzQpLVbZyVFOR0GQnJmVqLNyEvXA8r1qaWcUFAAAwCkUUIS00iMt2nCgRhdNGel0FATZN8/JVXl9q57bcNDpKAAAACGLAoqQ9sa2EknShVPTHE6CYJszNklnjEnQH5ftVVtHwOk4AAAAIYkCipD22rZSTUiN0bgR0U5HQZAZY3TXOeNUfKRFf/nwkNNxAAAAQhIFFCGrvK5F6wurdeFUpt+GioXjUzRtdJz+sGyvOvyMggIAAAw0CihC1pvbS2WtdBHTb0OGMUZ3LRqnouom/XVLsdNxAAAAQg4FFCHrta2lGjciWuNTY5yOggF03uRUTRwZo/ve3aN2RkEBAAAGFAUUIamyoVVr91ex+m0IMsbouxdMUGFVkxavZV9QAACAgUQBRUh6c3upApbVb0PVogkjNHdsku59Z7fqWtqdjgMAABAyKKAISa9vLVVOcpQmjmT6bSgyxugHF01SbXO7/rB0r9NxAAAAQgYFFCGnurFNq/dV6cKpI2WMcToOHDJlVJy+cPooPbJyvw7VNDkdBwAAICRQQBFy3tpeKn/A6sIpTL8Ndd85f4KMpN+8me90FAAAgJBAAUXIeW1bqcYkReq09Fino8Bh6fERunVBtl7aXKyPDtU6HQcAAGDYo4AipNQ2tWlVQaUunJLG9FtIkr7+mbFKigrTf7+6U9Zap+MAAAAMax6nAwDBcKztNTYeqFZHwMptDFtwQJIUE+7Vt88brx+9tE3v7CzXeZNTnY4EAAAwbDECipCy9fARJUR6lR4f7nQUDCJfOjNDY1Oi9P9e36l2f8DpOAAAAMMWBRQho7nNr73ljZqSHsf0W3yK1+3S9y+cpH0VjXpmHSPjAAAAwUIBRcjYVVonv7U6bVSc01EwCH120gidlZOo376zRzWNbU7HAQAAGJa4BhQhY2dJnWLCPRqdEOF0FAyAk7nG98ysRG0orNF/vbJdv/vS6UFIBQAAENoYAUVI6PAHtLu8QZNGxsrF9FscQ1pchO4+J1cvby7Wm9tLnY4DAAAw7FBAERL2VjSqrSOgSWns/Ynju3PRWE1Oi9W/v7hNtU1MxQUAAOhPFFCEhJ0ldQrzuDQ2JcrpKBjkvG6Xfn3VNNU2teknr+xwOg4AAMCwQgHFsBewVjtL6zR+RLQ8bn7l0bvT0uN056Jx+sumw3pnR5nTcQAAAIYNPo1j2Dtc06z6lg6m3+KE3LVonCaOjNEPXtyqI03tTscBAAAYFiigGPZ2ltTJZaQJI2OcjoIhJMzj0m+umq6qxjb95G9MxQUAAOgPFFAMeztK6pSVFKXIMHYdwomZMipOdy4cqxc+PKT3djEVFwAA4FTxiRzDWlVDq8rrW3VmVqLTUTBEHL1/aEq0T6mxPn37mc365mdzj/tFxnWzM4MdDwAAYEhjBBTD2o6SOknSZK7/xEnyuF364swMNbb6tWTDQQWsdToSAADAkEUBxbC2s6ROI2PDlRAV5nQUDGGjEiJ0yfQ07S5r0Ls7mYoLAABwsiigGLYaWzt0oKqJ1W/RL2ZlJeqMMQlaml+hHcVHnI4DAAAwJJ1UATXGuI0xV/fx2IeNMauNMT88zjGpxpgV3e6PMsYcMsYs6/pJOZmcCG27SutlxfRb9A9jjD4/PV2j4iP03MZDqqhvdToSAADAkHPcAmqMecEYM94Yc03X/dOMMb+VZCR9o7cXN8ZcIcltrZ0jKccYk9vDMQmSHpMU1e3h2ZL+21q7sOunou9/JaDTzpI6xUV4lR4f7nQUDBNet0vXz86U22X05NoDam33Ox0JAABgSOltBDRFnSvl/sgYM0fSHyU9ba3tkBTow+svlLSk6/Zbkub3cIxf0jWS6ro9dpakW40xHxpjfn6sFzfG3G6M2WCM2VBRQUfF37X7A9pTXq9JaTEyxjgdB8NIfGSYrp2VqaqGVj3/4SFZFiUCAADos94KaIe1doekyyW1Svo3SV80xvR16m6UpMNdt6slpR59gLW2zlp79AVVr6uzvJ4paY4xZlpPL26tfdBam2etzUtJYZYu/q6gvEHtfsv1nwiKsSnRuuC0kdpeXKflu/nyCwAAoK96LZLGmHBJP5W0U9JvJWWocwpuX772b5AU0XU7ui/v12WVtbbeWuuXtEnSP0zdBY5nZ0mdfB6XspOjej8YOAnzxiVr2ug4vb2jTLtK6no/AQAAAMcuhMaY6yVNUOcU2VWSnlXnSGiipK9JGmWMudMY863jvP5G/X3a7XRJhX3M9aYxJs0YEynpfEnb+ngeIH/AamdpvSaMjJHHxULPCA5jjK44fbTS4yO0eF2RCsobnI4EAAAw6B3v0/lYSc2S3lZnkRwh6T8kxUpKk+Tr+jPtOK/xkqQbjTH3SLpa0nZjzM/6kOvHkpZKWiPp/6y1+X04B5AkbT5Yo8bWDqbfIujCPC59dW6WkqLD9MSaQq3bX+10JAAAgEHtmAXUWvsTSQcl3Sbp3yWFqbMQRlprfyRpv7X2R9bafzvOa9Sp81rONZIWWWu3WGt73I7FWruw2+2l1tqJ1tpp1trfn/hfC6HsnZ3lchlpQmqM01EQAiJ9Ht08L1txEWG6+dH12nyw1ulIAAAAg1Zv8xOttXaPpLsk3avO60B/fSJvYK2tsdYusdaWnmRG4IQs3VWurKQohXvdTkdBiIgJ9+qW+dlKjArTTQ+v1fbio9dVAwAAgNR7AXUZY0ZIekGd5fMadU69lfq2CBEwoIprm7Wr6/pPYCDFRXj11K2zFe3z6MaH12l3Wb3TkQAAAAad3gpogaRISfdYa9dL+i9Jdxlj4iWFBzkbcMKW5XduicH0WzghIzFST912ljwuo+sfWqt9FSxMBAAA0N3xVsE1kv5orS2U9JQkWWvrJc2UVCfpF13H3XQC+4ICQbU0v1yjEyKUEuPr/WAgCLKTo/TUrbPlD1hd8+Aa5ZcyEgoAAPCx4xVHtzqv+5SkVcaYncaYHZK2S9ohaaYx5g51TsvlYjs4rrXDr5UFlVo0YYQ6vz8BnJGbGqNnbj9LRtLVD6zWpqIapyMBAAAMCsdbBbdDnXuASlKptXaSOrdSmWutnSjpp5IulHSNtbY96EmBXqzfX6OmNr8WTUxxOgqg8akxev7rcxUX4dX1D63VqoJKpyMBAAA4rrepszONMc9LGm2MiVDnVNylxphiSW9K+pm1loucMCi8t6tcPo9Lc3KSnY4CSJIykyL1/NfnKCMhUl95dL3e2s5i4AAAILR5enl+s6TvSnpM0oKu2x+LkXS/MeY71trlQcoH9Nmy/HLT0DGMAAAgAElEQVTNGZukiDBmhMMZi9cW9fj4VXmj9eiqQn39yY26cuZonZ6Z8Knnr5udORDxAAAAHHe8RYi8ktzW2n2SXpV0kaQLJH1O0iWSmiVdKelPxpjoAcgKHFNhZaP2VTZq0YQRTkcB/kFkmEe3zMtWVnKUntt4SKv3VTkdCQAAwBHHuwa0XdJ1xphfWGt/IWmapO9IOkPScmvtq9baIkk/ZhounLYsv1ySKKAYtHxet748J0uT0mL1ypZirS+sdjoSAADAgDveCKhH0kFJc7se8kkyku6WdKUx5gljjM9a+1TwYwLH915+hXJSopSZFOl0FOCYvG6Xrp2VofGp0Xpp02F9dKjW6UgAAAAD6njXgBZIapFku7ZfcUt6XdLobuf+SdJNQU0I9KKprUNr9lXpxrPGOB0F6JXH5dJ1s8bo0VX7tWTDQfk8bKMMAABCx/Gm4Gap8xrPr3b91Eq6XdK/WWsnWWtzJaUZY64ciKDAsazeW6W2joDOmcj0WwwNYR6XbpqTpZFx4XpqbZHWcE0oAAAIEb199X6RpDsl3SEpTp1TcC83xmzsev5H6pySCzhmaX65osLcystK6P1gYJAI97r1lbnZSogM062PbWA6LgAACAnHLaDW2l9ba2+y1n5F0t3W2n3W2q9KWtT1/BpJ3wh+TKBn1lot3VWheeOS5fOw/QqGlmifRzfPz1Z8pFc3PbJOu8vqnY4EAAAQVH2++Mha+3a323Xdbm/v71BAX+0pb9Dh2mYtYvothqi4CK+eunW2vG6XbnhorUqPtDgdCQAAIGhY/QJD2tJdnduvLJyQ4nAS4OSNSYrSE7fMUn1Lh+5++kO1+wNORwIAAAgKCiiGtKX55ZqUFqu0uAinowCnZOLIWP3iyqlaX1ij37yZ73QcAACAoKCAYsiqa2nXhsIaLWL0E8PEZTNG6YazMvXA+/v01vZSp+MAAAD0OwoohqwP9lSqI2C5/hPDyo8umaypo+L0L89tUVFVk9NxAAAA+hUFFEPW0l3lig336PSMeKejAP3G53HrD9fPlJF0x1Mb1dLudzoSAABAv6GAYkgKBKyW7a7Q2eNT5HHza4zhJSMxUvdcPUPbi+v041d2OB0HAACg33icDgCcjB0ldaqob9U5TL/FMLB4bVGPj39mfIqeXlekDn9Ap2cm9HjMdbMzgxkNAACgXzF0hCHpvV3lMkY6ezwLEGH4OndSqrKTo/TS5sMqq2N/UAAAMPRRQDEkLc0v17TR8UqO9jkdBQgat8vomjMz5HW79PzGQ/IHrNORAAAATgkFFENOdWObNh+sZfsVhITYcK8unzFKh2ubtWx3udNxAAAATgkFFEPO+7srZK20aALXfyI0TBkVpxkZ8Vq6q1yHa5qdjgMAAHDSKKAYct7bVa7k6DBNHRXndBRgwFw6LV3RPo+e23hQ7f6A03EAAABOCqvgYtDqaWXQgLV6e0eZJqXF6Jn1Bx1IBTgjIsytK2aO1qOrCvXuzjJdMCXN6UgAAAAnjBFQDCkHq5vU3O7X+NQYp6MAA258aozOzErUij2VOlDV6HQcAACAE0YBxZCSX1Yvl5FyR1BAEZoumjJS8ZFePbfxkNo6mIoLAACGFgoohpTdpfXKTIxURJjb6SiAI3xet648Y7RqGtv0+rYSp+MAAACcEAoohoy65nYVH2nRhJGxTkcBHJWTHK25Y5O0dn+1VuypcDoOAABAn1FAMWTsLquXJE3g+k9A5582UinRPn33+Y9U19LudBwAAIA+oYBiyMgvq1dchFepsT6nowCO87pd+uIZo1Ve36of/3WH03EAAAD6hAKKIaEjEFBBeYPGp8bIGON0HGBQyEiM1J0Lx+qFDw/pre2lTscBAADoFQUUQ8KBqia1dgSYfgsc5e5zcjU5LVY/eHGrqhvbnI4DAABwXBRQDAn5pfVyu4zGjohyOgowqIR5XLrnmuk60tyuH760VdZapyMBAAAcU9ALqDHmYWPMamPMD49zTKoxZkW3+15jzCvGmJXGmJuDnRGDX35ZvbKTo+TzsP0KcLSJI2P1T+eN12tbS/XXLcVOxwEAADimoBZQY8wVktzW2jmScowxuT0ckyDpMUndh7bulrTRWjtP0heNMcy7DGHVjW2qqG9l+i1wHF87e6xOz4zXf7y8XWV1LU7HAQAA6FGwR0AXSlrSdfstSfN7OMYv6RpJdcc4731JeT29uDHmdmPMBmPMhooK9sIbrth+Beid22V0z9Uz1Nrh1/de+IipuAAAYFAKdgGNknS463a1pNSjD7DW1llrj5zoeV3nPmitzbPW5qWkpPRTZAw2+aX1SowKU1J0mNNRgEEtOzlK379wkpblV+iZ9QedjgMAAPAPgl1AGyRFdN2OPoH3O9nzMMy0dQS0t6JBE0ay/QrQFzeeNUbzxiXpJ6/sUEF5g9NxAAAAPsUT5NffqM5pt2skTZeUf4LnPd913pqgpMOgt6e8Xh0Bq8lpsU5HAQalxWuL/uGxBeNStLmoVjc8tFZ3LBwrr/sfv8O7bnbmQMQDAAD4lGCPLL4k6UZjzD2Srpa03Rjzsz6c95ikHxtjfidpsqS1QcyIQWxnSZ3CvS5lJbH9CtBXsRFeXZWXodK6Fr36UYnTcQAAAD4R1AJqra1T54JCayQtstZusdb2uB2LtXZht9sHJJ0naaWkc621/mDmxODkD1jtLKnXxJGxcruYfguciPGpMTo7N0XrCqv10aFap+MAAABIGoBrK621NdbaJdba0hM8r7jrvKMXKEKIOFDdqOZ2vyYx/RY4KedNTlVmYqRe3HRYVQ2tTscBAABgcR8MXjuL6+RxGY0fEe10FGBIcruMrjkzQy5j9Mz6g+rwB5yOBAAAQhwFFIOStVY7Suo0NiVaPq/b6TjAkJUQGaYrZ47S4dpmvbH9hCaiAAAA9DsKKAalXaX1qmlqZ/VboB9MTo/TnLFJWrW3SjuKuaoBAAA4hwKKQentHWUykiamxTgdBRgWLjxtpNLjw/X8h4dUeqTF6TgAACBEUUAxKL21o1QZiZGKCfc6HQUYFjxul66fPUZhbpf+vGq/DlY3OR0JAACEIAooBp3i2mZtO1zH6rdAP0uIDNNX52Wrw291w8NrVVHPyrgAAGBgUUAx6Ly9o0ySuP4TCILU2HB9ec4Ylde16suPrFNdS7vTkQAAQAihgGLQeXtHmXJSopQS43M6CjAsZSZF6Y83zNTusnrd+tgGtbT7nY4EAABCBAUUg8qRpnat2Vel8yePdDoKMKwtnDBC/3P1dK0vrNZdizexRygAABgQFFAMKkvzy9URsDpvcqrTUYBh77IZo/Tjz5+md3aW6XsvbFUgYJ2OBAAAhjmP0wGA7t7eUabkaJ9Oz4hXfmm903GAYe+mOVmqbmzTve/sUXl9i357zQwlRzP9HQAABAcFFINGa4dfy/LL9fkZ6XK5jNNxgJDxrc/mKjU2XP/51+26+L4Vuu9Lp2t2TlKPxy5eW3TS73Pd7MyTPhcAAAwPTMHFoLFqb5Ua2/xc/wkMMGOMrp2VqZfunKfIMI+u/dMa3b+0gCm5AACg31FAMWi8tb1MkWFuzRnb88gLgOCanB6rV+6er4unpevXb+brK4+uV1UDe4UCAID+QwHFoBAIWL2zs0wLJ6Qo3Ot2Og4QsqJ9Ht33pRn62eVTtGZflS6+7wO9s6NM1jIaCgAATh0FFIPChgM1qqhvZfotMAgYY3TDWWP0lzvmKsrn1q2Pb9D1D63V9uIjTkcDAABDHAUUg8KLmw4rwutm+xVgEJkyKk5vfPts/fjzp2lnSZ0u+d8P9PzGQzrS3O50NAAAMESxCi4c19rh16sfFetzp6UqysevJDCYeN0ufXluli4/fZTuX1qghz/Yr62Ha7UgN0Vn56YozMP3mAAAoO/4tA/HLd1VobqWDl1++iinowA4hrgIr35w0STFhnv15vZSvberXB8eqNHnp6drYlqs0/EAAMAQwVfXcNxLmw4rOTpM88clOx0FQC8So8J07axM3b4gR2Eelx5fc0CL1x5QXQvTcgEAQO8ooHDUkaZ2vberXJdOT5fHza8jMFRkJUfprnPG6bzJqdpVWq/fvr1ba/ZVKcBquQAA4Dj4xA9HvbatRG3+gL7A9FtgyPG4XFo0YYS+9dlcjU6I0F+3FOuB5XtVWtfidDQAADBIUUDhqBc3HVZOSpSmjopzOgqAk5QU7dPN87J11RmjVdXYpj8sLdCWg7VOxwIAAIMQBRSOOVTTpHX7q/WFGaNkjHE6DoBTYIzR6ZkJ+va54zU6IULPbjioN7aVMiUXAAB8CqvgwjEvby6WJF02g+m3wEBbvLYoKK8b7fPo5vnZ+ttHJXp/T4VK65p1TV6mIsLcQXk/AAAwtDACCkdYa/XipsPKG5OgzKRIp+MA6Ecel0uXzxily2akq6C8QX9cvlcV9a1OxwIAAIMABRSO2F5cp4LyBvb+BIax2dlJumV+jprbOvSHZQVauqvc6UgAAMBhFFA44qVNh+V1G108Nc3pKACCKDs5SncuGqfEqDDd8th6PbnmgNORAACAgyigGHD+gNXLW4q1cMIIJUSFOR0HQJAlRIbpa2eP1aIJI/TDl7bpnrfyZVmcCACAkEQBxYBbWVCpivpW9v4EQkiYx6UHbjxDV+eN1n3vFejfXtiqDn/A6VgAAGCAsQouBtxLmw4rJtyjcyaOcDoKgAHkcbv0yyunKTU2XP/7XoEqG1r1++tmskIuAAAhhBFQDKimtg69sb1UF09NU7iXD51AqDHG6F/On6CfXnaa3ssv13UPrVFNY5vTsQAAwABhBBRB132/wQ+LatTU5le0zxO0fQgBDH43zslSSoxP33xms678v1V67KuzlJHIlkwAAAx3jIBiwFhrtWpvpVKifcpOjnI6DgCHXTAlTU/eMluV9a26/P6V2nigxulIAAAgyCigGDAHqppUXNuiueOSZIxxOg6AQWBWdqJe/MY8RYd7dO2f1ujlzYedjgQAAIKIAooBs2pvpcK9Lp2ekeB0FACDyNiUaL105zzNyIjXt57ZrHvf2c02LQAADFMUUAyImqY2bS+u05lZiQrz8GsH4NMSosL0xC2zdOXM0br3nT36p2c3q6Xd73QsAADQz4LeBIwxDxtjVhtjftjXY4wxHmNMkTFmWdfP1GDnRHCt2VclY6Q5OUlORwEwSPk8bv3mqmn6189N0Eubi3X9Q2tV2dDqdCwAANCPgroKrjHmCklua+0cY8wjxphca+2e3o6RFCPpaWvt94KZDwOjrSOg9YXVmpwWq/jIMKfjAHBIX1e+TogM07WzMvXchoP67P8s15+/eqZmZjJ1HwCA4SDYI6ALJS3puv2WpPl9POYsSZcYY9Z1jY72WJSNMbcbYzYYYzZUVFT0a3D0n00Ha9TSHtDcsclORwEwREwdFaevf2asXEa65oHVenx1IdeFAgAwDAS7gEZJ+nhJw2pJqX08Zr2kc621syR5JV3U04tbax+01uZZa/NSUlL6NTj6RyBgtaqgSqPiIzQmiT3+APRdenyE7lqUqwW5KfqPl7frn57drKa2DqdjAQCAUxDsAtogKaLrdvQx3q+nYz6y1pZ0PbZBUm4wQyJ4VhRUqqKhVXPHsvUKgBMXEebWQzfl6Tvnj9fLW4r1hftXaV9Fg9OxAADASQrqNaCSNqpzSu0aSdMl5ffxmCeMMf8taZukyyX9PMg5ESR/Xrlf0T6Ppo6KczoKgCHqmfUHlRjl01fmZunZ9Qd14e9W6MqZozWlD/9duW525gAkBAAAfRXsEdCXJN1ojLlH0tWSthtjftbLMa9K+omkJyRtlrTaWvtOkHMiCPZWNGhZfoVmZyfK42brFQCnJndEjO5aNE4pMT4tXlek17eVyB/gulAAAIaSoI6AWmvrjDELJZ0n6VfW2lJJW3o55oikI5KmBTMbgu/RlYUKc7s0KzvR6SgAhon4yDDdviBHr24t0Yo9lTpY3axrZ2UoJtzrdDQAANAHQR+WstbWWGuXdJXPkz4GQ8uR5na98OEhXTo9nQ+GAPqVx+3SZTNG6aozRutwbZN+v7RAhZWNTscCAAB9wLxIBMUz64rU1ObXV+dlOR0FwDB1emaC7vjMOIW5XXrog336oKCSrVoAABjkKKDod3Ut7frj8r1akJvcp0VCAOBkjYwL1zcWjdPEkbF6bWuJnl5/UC3tfqdjAQCAY6CAot89sHyvapva9b0LJjodBUAICPe6df3sTF1w2kjtKD6i3y8t0KGaJqdjAQCAHlBA0a/K6lr08Af7ddmMdEY/AQwYY4zOHp+i2xbkyB+wemD5Pq1kSi4AAIMOBRT96t53dssfsPqX8yY4HQVACBqTFKW7zxmn8anRenVriW57fKNqGtucjgUAALpQQNFvCsob9Oz6g7p+9hhlJkU6HQdAiIoM8+iGs8bokmlpen93hS66b4XWF1Y7HQsAAIgCin706zd3KTLMo7vPGed0FAAhzhijuWOT9cIdcxXmcemaB1brv1/doaa2DqejAQAQ0iig6BcbD9Toze1luv3sHCVF+5yOAwCSpKmj4/S3u+frS7My9acV+3XePe9raX6507EAAAhZFFCcMmutfvH6TiVH+3Trgmyn4wDAp8SEe/XzL0zVkq/NUbjXpa/+eb2++fQmVdS3Oh0NAICQQwHFKXt3Z7nWF9bo2+fmKjLM43QcAOjRrOxEvfatBfr2ubl6Y1upzr1nuZasP6hAgJVyAQAYKBRQnBJ/wOqXb+xSdnKUrjkzw+k4AHBcPo9b3z53vF771nyNT43Wd1/4SOff+76eXV+k1g6/0/EAABj2KKA4JS98eEh7yhv0r5+bIK+bXycAQ8O4ETF69vY5+t2XZijM7dL3Xtiq+b9cqvuXFuhIU7vT8QAAGLaYL4mTVtnQql+9sUszMuJ14ZSRTscBgBPichldNmOUPj89XSsLqvTgin369Zv5un9pga7Oy9DVeRmalBYjY4zTUQEAGDYooDgp1lp9/y9bVdfSoV9eOY0PaACGLGOM5ucma35usnaW1OlP7+/Tk2sO6NFVhUqJ8WnBuGQtGJ+s+eNSlBLDKt8AAJwKY+3wWHwhLy/PbtiwwekYw9bitUWfur+hsFp/2XRYF01N0/xxyQ6lAoDgOHfyCC3Pr9CKPZX6oKBS1Y1tkqTJabE6MytBOSnRyk6OUnZylNLjI+R28SUcACC0GWM2WmvzejuOEVCcsOrGNv1ta4lykqM0d2yS03EAoN+NiAnXVXkZuiovQ4GA1fbiOr2/p0Lv767Q8xsPqbHt7wsWhbldGpMUqTFJkUqJCVdKjE8jYnxK6foZEeNTcrRP4V63g38jAAAGBwooTkjAWj234aCMpC+eMVoupt4CGOZcLqOpo+M0dXScvrFonKy1qmho1f6KRu2v7PzZV9mog9VNWr23Sk1tfvU0tyjc61JMuFcxPo9iwj2KCfcqISpMydFhSo726Y7PjJWLkVQAwDBHAcUJWbGnUgeqm3TVGaMVHxnmdBwACIqjLzs4njFJURqTFPXJfX/AqrG1Q/UtHapvbe/8s6VDDd1uH6xpVl1znTq67UF637t7PpnWOz41RtMz4jRtdLySo7nuFAAwfFBA0WfFtc16Z0eZpqTHakZGvNNxAGBQcruMYiO8io3wSoo45nHWWtW3dKiyoVWVDW1df7ZqfWG13thW+skoanykV6PjIzQ6IVIZiZEanRDxqW2vrpudGdy/EAAA/YgCij5p9we0ZMNBRfrcunzGKFa9BYBTZMzfi2pOyqefa+3wq7i2RYdqmnSoplmHapq0rbhOkuRxGWUmRio7JUo5ydFq7fDL5+H6UgDA0EABRZ+8vaNM5fWt+vKcLEX6+LUBgGDyedyfTMf9WGNrh4qqm7quOW3QezvL9a7K9fjqQs3MTND83GQtyE3WlPQ4riUFAAxaNAn06ul1RfqgoFKzsxM1YWSM03EAICRF+TyalBarSWmxkqTmNr8Kqxrl87i0cm+Vfv1mvn79Zr4SIr2aOy5ZC8Z17m06OiHS4eQAAPwdBRTH9cqWYv3gxa0anxqti6elOR0HANAlIsytSWmxn1wDWlHfqlV7K7ViT6VW7KnQqx+VSJJykqM0PzdZ88cla87YJMWEe52MDQAIccbanhaLH3ry8vLshg0bnI4xrLy3q0y3P75RMzMTdNHUNIV5XL2fBABwnLVW5fWtKihvUEF5g/ZVNqjdb+UyUkZCpMaNiFbuiGh953MT5HHz33YAwKkzxmy01ub1ehwFFD1Zs69KX35kncanxmjxbbP1ypYSpyMBAE5SRyCgouomFZQ1qKCiQYdrmmUlxYR7NHdskubnpmjBuGSNSYpkkTkAwEnpawFlCi7+wUeHanXrYxuUkRipx26exXQtABjiPC6XcpKjlZMcrfMlNbV2aG9loySr93dX6s3tZZKkjMQIzR+XogW5yZo7Non9ngEA/Y4Cik/ZU1avLz+yTvGRXj15y2wlRvHhAwCGm0ifR1NHxUmSpqTHqaqxTQXlDdpT3qC/fHhIT68rkpE0KiGia7pujDISI+RxdU7XZe9RAMDJooDiE9sOH9Etj62Xx+3SU7fO1si4cKcjAQCCzBij5GifkqN9OisnSf6A1aGaJu3pun70/d0VWpZfIa/bKCMxUtlJUcpKitTpmQmKCGP/UQDAiaGAQtZaPbaqUD9/bZcSo8L05C2zNCYpqvcTAQDDjttlNCYpSmOSonTupFS1tPu1r6JBeysaVVjVqPd2levdXeXyuIymjIrT7OxEnZmVqLysBKbsAgB6RQENcUea2vWvz2/RWzvKdM7EEfrNVdOZdgsA+ES4163J6XGanN45Zbel3a/slCit21+t9fur9eeVhXrg/X2SpAmpMTozO0GzspM0KyuRmTQAgH9AAQ1hHxbV6O7Fm1Re36IfXjxJt8zPZvVDAMBxhXvdKqltUUZCpDISInXp9HQdqmnW/spGHahq1JINh/TkmiJJUlyEV6MTIjQ6PkKjEyP1rXNzFcvCdgAQ0iigISgQsPrTin369Zv5SosP13Nfn6sZGfFOxwIADEFet0vZyVHKTu68dMMfsCo50qwDVU06WNOkQzXN2l5cJ0l6ZOV+5SRHacqoOE0YGaOJI2M0YWSs0uPCh9UXoIvXdhbwgLVqbQ+oud2v5na/OvwBuYyRMfrUnx6XUUSYWzfPy5bLNXz+OQCDyf9n787D5KrL9P+/n6rqfcvSnXSTdDYIWQghQAg7BBQFREFkURBGXGBccNSZUWbUcUb5ueDy1WFkxigqCoiMoyiCCMgOYUkkAckCSejsnXTS6fS+VT2/P85JUjTdSSd096nuul/X1VefOvU5p+5K0VQ99VnOnr/LQ6GF1waWCtAskkw5X/zdyzy2uo7axnbmHFbKe4+dyIotjawIPxyIiIi8FfGYMXF0IRNHF+7d19rRzaaGNsYW5bJ8UwNLanbx+2Vb9t5fkp9gZmUJR4wrYfLYQiaPKQznoRZSlJd5H1XcnZ0tnWxpaGPzrjY2N7SxpaGdLQ1tbNndxob6Vtq7knR0pTiYq61//f6VlBXkMLowl1GFe37nMrowh9FF6ftyGFOUG/wU5pKIxwbtuYqIDLTM+7+6DLhkyvnjS1u4+ZE1rNneTEVxHpfPr2buxLIR9Y2ziIhkpsK8BEeOL3lDL0Jjexev1jaxsraJ1bWNrK5t4s+v1FLf0vmGY8uLc6keU0hlaT7jSvIYV5rP+NJ8xpfmMa4kn1GFOZTm55CfExuQ97S2ziQ7Wzqob+lkZ3Mndc0dQWEZFpmbw+2O7tQbjivIiTNhdAFVZflMHVtEfm6cgpzgJz/8nYgb7k7K2fs75U53ymnrTDKtoohdrZ3sau2iobWT2sZ2VtU2sau1k9bOZJ+Z9xSkY/cUpUV5e7fHFufuLVbHFuUxpiiX3IQKVhGJjgrQEawrmeL3y7bww0fX8PqOFmaML+H9J1QzZ0IZMRWeIiIyxHobAhc3Y3ZVGbOr9i1yVN/Syc6WTuqbO9jZ0smu1k6a27t5es0OGtu7ez13bjxGaUGC0vwcSgtyyEvEyInHSMSNRCxGTtzIiceCYbHdqaCHsjsV/HQlae7opr6l70KvJD/BqIIcRhXmsmDKGMoKcxhVEPRGjirMoSAnPiAFcFVZQa/7u5Ip2jqTtHYmae3spqUzSUtHd/DT2U1LR5KdzZ1sqG+lpSO4r6/e17xEjKK8BEW5cWZWlTK+NI/K0nwqywrC33mML82nRPN1JUt1JVO0dHQTjwX//2jrTJKbiBHXEPkBYe4HMzgkc82fP9+XLFkSdYzINXd088SrdTy8YhuPrN5OQ2sXs6pK+Ye3HcE7Zldy1wsbo44oIiJyyDq7UzS1d9HU3k1TRzetnd20dwXFWXs417K9K0lX0km5M6owh66k051M0ZVMEYsZeYk4eYkY+TmxvdtFeYm9PYZjw97CJet3UZyXoDQ/MeyGuabcae9M0hwWp+mFavC7m9aOoPDe3dZFW9ebC++8RCws6IPCvqwgKO737PvQqVMoL8rTvFUZFtK/AHN3mjq6qd3dzo7mDhrCUQcNbV3sau2ipaP3L7oSMaMgJ071mEKOGFf8hp8pY4uyfnSBmS119/kHaqce0GHO3dm0q40nXqvjoRXbeGbNTjqTKUYV5nD2jHFccEwVZ80Yp6G2IiIyIuQmYowtzmNscd6gPUYyBdubOpg0pvDAjTNUzIzCvASFeQkoOXD7rmSKxrYudrd30djWnbYd/Kzb0UJTexeptH6LWx5bSyJmjCvJY3xZPuXFeUGRurdYTVBWkENxXoLcRIzcRIy8RIzceHzv7dxEjNx4+n0xFbQyoHa3dvH6zhaWrq+ndnc7Wxvbqd3d/obRDomY7Z1vXVWVz6jCXIpzEyTdSaacORPK6OxO0ZlM0tKRpGZnC3/dsIs/LN83lz0eM6aVF2nCqeMAACAASURBVHHUYaUcdVjZ3t9lhRpJ0NOgF6BmdiswG7jP3W/sb5v+HJdNkimnvqWTNdubg7ky25pYVdvEa9uaaQ6/pZk0ppCrTp7MObPHM3/y6GH3ba2IiIhEIyd+4MI+5U5zR/feovTIyhJqd7dTG36g31jfyittXexu66JlP3NWDyQWrg4ci9ne7bgZRXmJYEhk3MKhkRasIhwPfr+hbO3xxbv1cVfPUjf9C/s335d+3BtPkogFmXrLlYgFzyW9Tfrxe877xoxvLsL3tTvQscHxOXEjNx4nJ2HkxmN7h6XvKfz3bOfFY+SkfRGw50uBvB5fEmTa58o9vZgNLV3h3OlO6ls62VjfRs3OluBnRwu7Wrv2HpMTN8aX5jO7qpTKsnwqy/KpKM6jOC+x386avlbBbetMsraumbV1zby2rZmVWxt5dl0996QtsjZhVAEzKkuYNKaQKWP3LbA2cXRh1vaYDmoBamYXA3F3P9nMfmpm0939tQO1AY4+0HHDxYsbdrGjuZOUO6lUsOBA0h13pzvptHcHq+Sl/27rTO5d/GBnSwc7m4M/qvRvHUcV5jBjfAkXHzeBGZUlzJ88hiPHF6unU0RERAZFzCwYfpufA6ODfT1XPN4jmXLaw+HQ7d0pkskU3algwaVk+Ls7mdq3nfI3tNn7uQn2fn5KhZ+fUh6cPxVudyedlKfelGGPvmabvWm3p296X3e96UCHvXm9R96Up2cP7kv2Eqi3jD0z9N2u9/zJMMdAiRlpPdbxvQVqTtze0JOdm4jv/eLA2FMkB18mmAUFdCwWFtK2r3hO+b7Me/6dkil/w1ztzmSKjq4UHd1JGlq76O7jCR5Wls+U8iLOnVPF1PKg6Fu1tYmxxbkDug5KQW6cORPKmDOh7A37dzZ38MqWxvBnN2vrWnh23c439LrGjL0LqZUVBHPJ98wrLy3IITcezl1P+7fNiceYO7Gs17+54WSwe0AXAneH2w8CpwE9C8ne2hzbj+Mws2uBa8ObzWa2eoByR6Uc2NGfhuuB5YObJdv1+7WQIaHXI3Potcgcei0yi16PzKHXInNE8lqsBxYP4PmuHMBzpXt9kM7bh6F4LSb3p9FgF6BFwOZwux44rp9t+nMc7r4IWDRQYaNmZkv6M3FXBp9ei8yi1yNz6LXIHHotMotej8yh1yJz6LXIHJn0Wgz2wONmYM964sV9PF5vbfpznIiIiIiIiAwjg13YLSUYPgtwDFDTzzb9OU5ERERERESGkcEegnsP8KSZHQacB7zfzG509y/tp81JBNOoe+7LBiNmOPEIoNcis+j1yBx6LTKHXovMotcjc+i1yBx6LTJHxrwW5n0tDTZQD2A2GjgHeMLda/vbpj/HiYiIiIiIyPAx6AWoiIiIiIiICGhxHxERERERERkiKkBF0phZmZn9ycweNLPfmVlu1JmynZmNN7MXo84hATO7xczeHXWObGZmo83sfjNbYmY/ijqPSCYI3yueDLcnmdljZvaImS0yM4s6XzZJfy3S9s0xs4eiypSt+ngt7jWzeVFlAhWgGcPMbjWzxWb2pQO3lkF0JfA9d38HUAucG3Eege+w77JMEiEzOx2odPd7o86S5a4C7giv51ZiZhlxXbds06PgyQk/1D1tZh+OOlu2CdcNuY3gOvIA1wEfd/ezgWrg6KiyZZteXgvCLwC+B+RElSsb9fFaXAmsdfdlkQVDBWhGMLOLgbi7nwxMM7PpUWfKVu5+i7vv+YauAtgeZZ5sZ2ZnAy0EXwZIhMwsB/gxUGNmF0adJ8vtBOaY2SiCD9cbI86TdXr5YHc9sNTdTwUuMbOSyMJlpyRwOdAI4O5fdPeV4X1jgR1RBctCb3gtQtcAj0YTJ6u94bUwszHAd4FdZnZWlMFUgGaGhcDd4faD7LsGqkTEzE4GRrv7s1FnyVbh8OcvAzdEnUUAuBpYAdwELDCz6yPOk82eAiYDnwZWAvXRxslKPT9kL2Tf+/gTgHqlh5C7N7r77p77zexy4BV33xJBrKzU87Uws7HABwlGM8kQ6uXv4rPA/wI/Aq42s/dEk0wFaKYoAjaH2/XA+AizZL3wG6KbAQ2jitYNwC3u3hB1EAHgWGBReFms24FIvz3Ncl8B/t7dvwqsIuhdkCHUywc7vY9nGDObBvwT8Jmos2S5bwL/4u5dUQcRjgV+GL6P303wxVkkVIBmhmb2zXErRq9LZMJet/8l+J/l+qjzZLm3A580s8eAeWb2k4jzZLs1wLRwez6gv4/ojAaONrM4cCKg66lFT+/jGSQcIv0r4MO99YzKkDoT+Fbae/mNEefJZhnzPq7/QWaGpewbdnsMUBNdlKz3EeA44IvhCnqXRx0oW7n7Ge6+0N0XAsvc/aNRZ8pytwJnmdkTwCfQcKoofQNYBOwGxhB80JZo6X08s9wATAJuDt/Lz4w6ULZy9yN7vJdrsc3o3AR8ysyeBs4AfhpVEHPXF6dRM7NS4EngL8B5wEn6xk5ERCSzmdlj7r7QzCYD9wMPA6cQvI8no00nIpKZVIBmiHC4yDnAE+HYbBERERkmzOwwgl7QP+tLZBGRvqkAFRERERERkSGhOaAiIiIiIiIyJFSAioiIiIiIyJBQASoiInKIzOyScA7/QJzrU2aWb2aPmNnRZvbPZlZqZj8yszP6OMbMrDjtdszMigYij4iIyGBQASoiItIPYXGXY2aWtvtC4Jq0NmZmuWYWC28/bGbPhZeCSP95zswe7PEQCeBLQDdQBLzf3RuBs4FNfcRaCLyYVnROAjabWU74+Hlv7VmLiIgMrETUAURERIaJecDPgW4zSwGzCS7sfbyZ/TvwKhAHcoDLgVeADqCkj/N17dkws3xgC+DAaILC8omw57PY3deF7fLcvSPtHJ8Bvg/cYWYTgYLw8ReHdXKOmZ3g7p1v9cmLiIgMBBWgIiIi/eDufzWzY4BvEhR9fwIuAsrDfZ8Fxrn7X9IOW0JQaLb3OF0+QaG4Ry7BhcEXAPOBlUA98HEgZmZLCHo3m8xsnrs3mdk7gfcAHwFuJ7iO9JHA+4HvhOe9V8WniIhkEhWgIiIi/fcpgt7Jr/RyXwnwKzP7EEFB+Y/Abt5cfO6RY2ZPEvRivgSsAyaE7RuAXcApwH+5+9fM7C7gu2HxWQX8GGgkGLJbCXwe+ASwZ2jvLcATQMtbeL4iIiIDSgWoiIhIP5hZJXAdcI67t5tZgmDIbS6Q4+7PmNklwHeBU9z9HjP7CbCToBd0fHiqbQS9n2Pc/cLw3FOBHQRF5FcJCtyLwnbHh8dNAtaG20cBPwPeF95OAoezr+eT8HZq4P4FRERE3joVoCIiIv3g7rVmdiHwgJl1ERSBDwB5QHU4TPY/gQXu7uFhxxH0aHYS9G4CbCYoWnPTTj+GYAjvfxAsEHgvQdF6CvBYuNJuibvXh1keBh42s/elnWMbwVDcPT43IE9cRERkAKkAFRER6b91wAkEw2sfdfd/BjCz64F3A3emFZ8QvM/eQzBUdmG47zGglGCuJgDuvtTMTgOeBk4E3gmc7+5tZvbb8ByPHCBbG8GiSOm3RUREMoq98X1SRERE+sPMvg8UE6xeewpwobu3pN1vwNsJekgB3hX+vi/83enuD6a1nw58gWDo7Ezg39z9x+H+VwmG/j7cI8PfgNMIFkJaCrycdvfRwAx3rx2ApysiIjIg1AMqIiJyEMLCcibBtTmvJygwf0ZwOZY1QK27p4BpwI3s64ncMwR3Vvg7x8yec/fd4e01wF0Ec0C/CMw1s4sJrg36T8AiM/s7d38yPQ7BUF4DXnT3hWk5HyNYQTfh7t0D9fxFRETeCvWAioiI9IOZjSHovZwILCMYFvvr8O4PAO8l6AndAbyNYD5mI8G1PeGNc0AhKBpLCRYSag7PvQz4Vjjf9IPAh4BPuPurZraQoDC9aE9Pa1jw/gi4mGAhop5iwH+7+y/f4tMXEREZECpARURE+snMqoHNYQ9nX22K3b15CGOJiIgMGypARUREREREZEjEog4gIiIiIiIi2UEFqIiIiIiIiAwJFaAiIiIiIiIyJFSAioiIiIiIyJBQASoiIiIiIiJDQgWoiIiIiIiIDAkVoCIiIiIiIjIkVICKiIiIiIjIkFABKiIi8haZmfWyLxFFFhERkUymAlRERIY9M7vEzEbv5/4/mtnctNu/MbOZ/Tx3vplNM7O3m9mnzOy/zSy/R7OTzOyhHvseN7PjDnDumeHvaWZ2dj+yxMzscTOb3J/s4TGFZhbvZ9uYmS3s77lFREQOlr6dFRGRYcXMYkAc6HZ3D3dfCEwCvhe2MSAnbJMC2oHG8L6ZwLuA8rDjcq27f6THYzwLlAEGJIEtwEZgPfACMAqoTTvkaODptONHAeXAi/t5Hu8CvmVmRwMOLDKzue7eup+nfx5Q6O7r93Peh4BSoCvcNR1oNbPN4e0cYKu7X9TL4YXAXWb2Hnd/vo/z/5Xg80PnfnJWu/v4/dwvIiJZSgWoiIgMN/OAnwPdZpYCZgNrgOPN7N+BVwkK1BzgurDIHAPMN7M24NvAie7+kpn9Eni0l8eY7e6l/QljZvcCJwBtZnYRcCNBATgKeC18/Ep3L047JgZ8BfhiWES/bmb3A98Hrk1rdzLwK6AZ6AaOBLaa2bL0CATv559098fc/Zwe+R4AvuLuz/WSPQYk3L0TwN2bzexzQEmPdgkgFRbzXcDF7l5jZqcAXwbO3/NlQNi2pj//diIikn1s35fHIiIiw0PYw/lNgoLtT8BFBD2O3wQ+C4xz97+EBeE/AEcBrwNNwHp3/4iZVQCPAPPcPdnj/G3uXrCfx88Bku6eMrMVwCnu3mBmNwJrgQ8B17r76rD9Wnc/PO34zwPnpBeLZlYMPAv8Gfgn7/EGbWYfAD7s7ueY2U+AT/fVW2pmVwOfC29OBzYAHeHtX7j7np7iE4HbCXp5C4HRwGbeLE5QdL5sZk8BHwR2Ac8AbWGbmcAXgB8Ba9x9Sl//fiIikr3UAyoiIsPRp4CFBL2IPZUAvzKzD7n7PcA9ZvYb4J8IhsreZmYzgCOA7cAyM7vP3W+AvcVtnpmt2s/j5wKXEwzHTfW470zA9xSfob1tzOxtwGeAU9MPCnsfzwYeAp4ws4+mFbBTgK8BewrWswiG7fZlFHA3cFOP/VcT9KLuecznCApUzOztBEXzZfs57x5x4F6gHniSoHD+KPDfaH0JERHZDxWgIiIyrJhZJXAdQQ9iezjkM05QFOa4+zNmdgnwXTN7yN33zIW8CvhfYJ27n2ZmtwM3ExSsb097iFFAvbv3a5GiXjwP/MTMbk2bW5oKs5cAiwiGrS42swKCIbSNYbsxBMXpCQS9kphZFXAfMBn4XTikdyLwrJk5wdzXq9z9vrQMKYKhvOf3yDaOoDDtTRHwzl4K7zXufkGPfUngemAH8FSY+V1hj7AKUBER6ZMKUBERGVbcvdbMLgQeMLMuguG1DwB5QLWZLQH+E1gATDKzvyfoLX2KYCGhPUYBrQQFqJlZwt27gUqCeZZHAc8RzC9NNwl4v7s/mLbvSTNLhsfe4O5Pmdl3zOyd7v7ntOxNZjYrnHN5q5ndBGx29x/A3vmaq9x9UXj7GOC3wA+Az7v7vHD/GoJ5rO1m9nN6XxDoRYLhvOlO7vMfNnhe33H3r+3ZYWanAf/RS9tq4N/D7TsJFmC6zswWEfROi4iI9ErfUoqIyHC0jqCX8P8Iiqbp7j4J+DTBsNA7wzmUCYK5n08A9wAPAs1m9hhwLnA/8CXgJIIePYBjgOUERd0Sd5+X/hMes6dXdY/Tw/t+krbvu8DV4SVbmvfs3LPgT+hMgiJ3jwnAprTbu4F/dff/PMC/R2/DcXcSFM/pP9v2c463A4/32FcJbO2l7UaC4bxvB1YDXyf4N54PPHaArCIiksXUAyoiIsNOWFx2At8ws++Hi/JsAU4BLgx7MnH3tcBaM3tHePtUADO7lGCY6mjgAndvTjv9BQRzGvc3x7I/K/j9DvgDQU9rY887w17cuLs/m7a7irRFgNy9hn0ryr7pS2MzywXGEqyQ29O5BCsGpxsL3NHLec4mGOL7ZI+7xvPGghiCIcO4+2Yz+wLwPoIvAh53993hkGjrJY+IiIgKUBERGZ7CxYJmEhRI1xMMwf0ZweVY1gC14WVDIK0gCleIvYFgQZ8zgT+b2eXuvim8JueFwOeB4vBcS3o89FTgp2m3c3jjENwvh/tTBO+z59JjGG9YfN5CsHovZlYKzAHa3b2D3uWlbSfCx32JoLh9KTxPevH3X+7+zR6P+yHgiLAd7t5tZkeEz+fStEupFBPMR30vcFePHDl7Ntz9W2b2M+BKYAbwSlo+ERGRN9EbhIiIDCtmNoZgUZ6JwDKCobVHhXd/gKC4PAXYEc6h/BZwPBALi8m1wBnuvgO4Myy2lpvZBeF9V7n7lnAO6FJ3X9jj8W8nWLBnj28Dv3T3jvDx9lyWZDzwQ4Le1H9MO/4HBENX3+PuS8Pdf08wpPVf9/PUD0vbziF4Dz8ybZElCIrnrxDOCQ0XY+rNu4HvhNcevQe4xt1fSLv/RoLi8xHevGhRArjfzN4079TM/i2tjYiIyJvoOqAiIjLsmFk1weI9PS+Bkt6mOLy0yTRgm7u3mNlkd1/f2/ncfWOPfQmg1N3rBzh7CUFPZ895pJEws9we81IP1H4s0NDz2qkiIiL9oQJUREREREREhoRWwRUREREREZEhoQJUREREREREhsSIWSSgvLzcp0yZEnUMERERERGRrLN06dId7l5xoHYjpgCdMmUKS5b0XClfREREREREBpuZvWmRv95oCK6IiIiIiIgMCRWgIiIiIiIiMiRUgIqIiIiIiMiQiKQANbNbzWyxmX3pAO1uMbN3D1UuERERERERGTxDXoCa2cVA3N1PBqaZ2fQ+2p0OVLr7vUMaUERERERERAZFFD2gC4G7w+0HgdN6NjCzHODHQI2ZXTh00URERERERGSwRFGAFgGbw+16YHwvba4GVgA3AQvM7PreTmRm15rZEjNbUldXNyhhRUREREREZGBEUYA2AwXhdnEfGY4FFrl7LXA7cFZvJ3L3Re4+393nV1Qc8JqnIiIiIiIiEqEoCtCl7Bt2ewxQ00ubNcC0cHs+0K+LmoqIiIiIiEjmSkTwmPcAT5rZYcB5wPvN7EZ3T18R91bgp2b2fiAHuCSCnCIiIiIiIjKAhrwAdfdGM1sInAPcFA6zXd6jTRNw6VBnE8kWdz634ZCOu+LESQOcRERERESySRQ9oLj7LvathCsiIiIiIiJZIIo5oCIiIiIiIpKFVICKiIiIiIjIkIhkCK6I7KP5mCIiIiKSLdQDKiIiIiIiIkNCBaiIiIiIiIgMCQ3BFRnB3J0HV2zjfx5fy47mDjq7U3QlnZaObpIpJ5lyppYX8Z55hzGuJD/quCIiIiIywqkAFRmhXtywi2/cv4rna+qZVlHECZPHkJuIkROPsa6umXgshrvzwvp6bn5kDQtnVHDm9AoScQ2MEBEREZHBoQJUZITZsLOVb/15Ffe9tJXy4lxuvGgO7z+h+g2FZfrCR6dNL+e+l7fyl5XbeWnTbt47bwJTyouiiC4iIiIiI5wKUJERYldLJ//16Bp+sbiGRCzGp88+gmvPPJzivP3/mZfk5/D+EyZxbHUTv1++mUVPrmPBlDG886hKCnLjQxNeRERERLKCClCRYa69K8ltz9Tww0fX0NzRzaXHV/O5dxzJ+NKDm9M5o7KEz5QfycMrt/H0mh28ur2JD586lfLivEFKLiIiIiLZRgWoyDCVSjn3vrSFmx5YzeaGNs48soJ/OX8mMytLD/mcuYkY5x9dxdETyrhtcQ2LnljHNadOoaqsYOCCi4iIiEjW0mojIsPQurpmLvzh0/zDXcsoK8jh9o+cyG0fXvCWis901WMKufaMacQMfvzkOjbUtw7IeUVEREQku6kHVGSY6OxO8bfNu3mhpp719a1UleXz3UuP4b3HTiAWswF/vHEl+Vx3xuH89OnX+elTr/PBkyYP+GOIiIiISHZRASqS4bY0tPFCTT3LNzXQ3pVibFEu58+p5MRpY+noTnHXCxsH7bFHF+Vy7RnT+NnTNdy2uIYFU8dw7pzKQXs8ERERERnZVICKZKBkylm+qYHFa3eyuaGNRMyYM6GM+VNGM3VsEWYD3+PZl5L8HD56+lRue6aGT9yxlIuPm8hxk0Yf1DmuOHHSIKUTERERkeFEBahIBkm589KmBv6ycjs7WzoZV5LHBXOrmFc9isLc6P5cC3MTfPi0qdz+7Hp+s3QT7V1JTjm8PLI8IiIiIjI8qQAVyQApd17Z0shfVm5je1MHlaX5fPDEScyqKh3S3s79yUvEufrkKfz6hY388aWttHelOGtGRcbkExEREZHMpwJUJGKraxv58yvbqG1sp6Ikjw8smMRRh5USy8DCLice4wMLJvHbv27i4ZXbaO9Kct6cShWhIiIiItIvKkBFIuLu/M/j67ht8XrGFuVy2fxq5k4sy8jCM108Zrzv+Ink58R5as0O2ruSXHTshIzPLSIiIiLRUwEqEoFUyvnqH1fw82dqmDuxjEuOn0giNnwuyxsz44K5VeTnxHl09Xbau1NcNn94PQcRERERGXoqQEWGWEd3ks/dvZz7XtrKR0+bypTyomHZe2hmnDN7PAU5Me7/Wy2d3UmuWDCZ3ISKUBERERHpnT4pigyhxvYu/u6nz3PfS1v54vmz+NIFs4dl8ZnutOkVXHzsBF7b1swvnq2hszsVdSQRERERyVAqQEWGyLbGdi77n8UsXb+L718+j4+dMS3qSANm/pQxXHL8RF6va+G2xSpCRURERKR3KkBFhsD2xnYuvuUZNta38tMPncBFx06IOtKAO3bSaC6dX03NjhZ+/kwNHd3JqCOJiIiISIZRASoyyJIp5x/uWkZ9Sye/uvYkTp9eEXWkQTOvehSXnVDNhvoWbnumho4uFaEiIiIiso8KUJFBdvMjr7F43U6+euFRzJ04Kuo4g+6YiaO4bH41G+pbg55QFaEiIiIiElIBKjKInlm7gx/85TUuPm4Cl86vjjrOkJk7cRSXnzCJjbta+dkzNTS1d0UdSUREREQygApQkUGyo7mDz9y1jKnlRXztwjlRxxlyR08o4/0nTGLTrlY+8vMltHWqJ1REREQk26kAFRkEqZTz2V8vY3dbFz+84jiK8rLzkrtzJpRx2fxqXlhfz8fvWKrVcUVERESynApQkUHwP0+s5cnXdvCVdx/FrKrSqONEau7EUXz9vUfz2Oo6Pnf3MpIpjzqSiIiIiEQkO7tlRAbRCzX1fPfBV7lgbhUfWJA98z735wMLJtHY1sU3/rSKkvwcvv7eOZhZ1LFEREREZIipABUZQLtaOvn0r15k4ugCvnHx0Sqy0lx35uHsbuvilsfWUlqQ4F/OmxV1JBEREREZYipARQbQdx9aTV1TB7/7xKmU5OdEHSfj/PM7Z9DY3sWPHl9HWUEOn1h4xAGPufO5DYf0WFecOOmQjhMRERGRwaMCVGSArK1r5lfPb+TKEydx9MSyqONkJDPjq++ZQ1N7Nzc9sJrS/Bw+eNLkqGOJiIiIyBCJpAA1s1uB2cB97n5jL/cngHXhD8D17v7yEEYUOWjffmA1+YkYn37b9KijZLRYzPjOpcfQ3N7Nl3//N0ryE1w4b0LUsURERERkCAz5KrhmdjEQd/eTgWlm1tun9bnAr9x9Yfij4lMy2tL19TzwSi3XnXk45cV5UcfJeDnxGD+88jgWTBnDP969nL+s3BZ1JBEREREZAlFchmUhcHe4/SBwWi9tTgIuMLPnzezWsEf0TczsWjNbYmZL6urqBietyAG4O1+/fxUVJXl89PSpUccZNvJz4vzk7+Yz+7BSPnHHX3l23c6oI4mIiIjIIItiCG4RsDncrgeO66XNC8Db3X2rmf0COB/4Q89G7r4IWAQwf/58XVxQIvHgim0sXb+Li+ZN4J4Xt0QdZ1gpyc/h59cs4LIfLeajty3hzo+dyNyJo6KOJSIiIiKDJIoe0GagINwu7iPDS+6+NdxeAmhSnWSkrmSKb/1pFRXFeRw/eXTUcYalMUW53P6RExlVmMPf/fR5XtvWFHUkERERERkkURSgS9k37PYYoKaXNr80s2PMLA5cBCwfomwiB+XXL2xk3Y4Wzp1TSTyma34eqsqyfG7/yInEYzGuuvV5Nta3Rh1JRERERAZBFAXoPcBVZvY94DLgFTPruRLuV4FfAsuAxe7+8BBnFDmglo5uvv/wa5wwZTQzK0uijjPsTSkv4pcfWUBrZzdX3focu1o6o44kIiIiIgNsyOeAunujmS0EzgFucvdaevRwuvvfCFbCFRlSdz63od9t/7JyGzuaO7jk+ImYqfdzIMyqKuWnHzqBK378HJ+886/c9uEFUUcSERERkQEURQ8o7r7L3e8Oi0+RYaepvYsnX9vBUYeVMmlMYdRxRpT5U8bw9YuP5pm1O/naH1dEHUdEREREBlAkBajIcPf4q3V0p1K8c3Zl1FFGpEuOn8i1Z0zjF4vX89zrujyLiIiIyEgRxWVYRIa19q4kS9bvYu7EUZSX5EUdZ8T6wrkzeW1bE/cu30JFcR7TKoqjjiQiIiIib5F6QEUO0osbG+jsTnHytLFRRxnR4jHjBx84lrHFedzx3AbqtSiRiIiIyLCnAlTkILg7z67dycTRBVRr7uegK83P4eqTJgPwi8U1tHclow0kIiIiIm+JClCRg7C2roW65g5OUu/nkBlbnMcVJ05iR3MHdy/ZSMo96kgiIiIicohUgIochMXrdlKYG+foCWVRR8kqh1cU866jq1hV28QLNfVRxxERERGRQ6QCVKSfdrV0smprIwumjCEnrj+doXbStLFMKy/iz6/U0tzRHXUcERERETkE+hQt0k/PvR70vC2YOibiJNnJzHjPvMPo6nb+9PLWqOOIiIiIyCFQfVvb7gAAIABJREFUASrSD13JFEvW1zP7sFJGFeZGHSdrjSvJ5/Tp5by4sYF1O5qjjiMiIiIiB0kFqEg/vLSpgdbOpBYfygALZ4xjdGEOv1+2he5UKuo4IiIiInIQElEHEMl07s7itTsZV5LHtPKiqOMMS3c+t2HAzpWbiPHuYw7jF4vX8/RrOzhzxrgBO7eIiIiIDC71gIocwMb6Vrbsbufkw8diZlHHEWBmZSmzq0p5ZPV2drV0Rh1HRERERPpJBajIASxet5O8RIx51aOijiJpLphbhWHc+9KWqKOIiIiISD+pABXZj6b2Lv62uZHjJ48mLxGPOo6kGVWYy9tmjWNVbRMrtjRGHUdERERE+kEFqMh+PF9TT9Jdiw9lqFMOL2d8aR73vrSFju5k1HFERERE5ABUgIr0IeXOkppdTB9XTHlxXtRxpBfxmHHRvAnsbuvi6TU7oo4jIiIiIgegAlSkDzU7Wtjd1sVxk0dHHUX2Y/LYImZWlvD0mp10dKkXVERERCSTqQAV6cOyjQ3kJmLMqiyNOoocwFkzxtHWleTZ1+ujjiIiIiIi+6ECVKQXXckUL2/ezZzDSslN6M8k01WPKWT6uGKeeq2Ozu5U1HFEREREpA/6ZC3Si1W1TXR0p5hXreG3w8VZM8bR0pnkhRr1goqIiIhkKhWgIr1YvrGBkvwE0yqKoo4i/TSlvIip5UU88VodXUn1goqIiIhkIhWgIj20dnazuraJYyaOImYWdRw5CGfPHEdTezdL1++KOoqIiIiI9EIFqEgPL2/eTdKdedWjoo4iB2laeRGTxhTy+KuaCyoiIiKSiVSAivSwbGMD40ryqCrLjzqKHCQz46wZ49jd1sVv/7op6jgiIiIi0oMKUJE09S2drN/ZyrzqUZiG3w5LR44vZsKoAm55bC3dmgsqIiIiklFUgIqkWb6pAYBjNPx22NrTC7qhvpXfL9sSdRwRERERSaMCVCTk7izb0MCUsUWMLsyNOo68BbOqSphZWcIPH1tDMuVRxxERERGRkApQkdDfNjdS19zBser9HPbMjOvPns66uhbuf3lr1HFEREREJKQCVCR0z7LNxGPGnAllUUeRAXDenEqOGFfMfz2yhpR6QUVEREQyggpQEaA7meIPy7cwY3wJBbnxqOPIAIjFjE+ddQSrtzXx4IptUccREREREVSAigDwzNqd1DV16NqfI8wFc6uYPLaQmx95DXf1goqIiIhETQWoCHDPi5spzU8wo7Ik6igygBLxGJ9ceASvbGnk0dXbo44jIiIikvVUgErWa+tM8sArtZx/dBU5cf1JjDTvPW4CE0YV8J9/WaNeUBEREZGIRfJp28xuNbPFZvalA7Qbb2YvDlUuyU6Pv7qd1s4k7znmsKijyCDIicf4+MLDWbaxgafW7Ig6joiIiEhWG/IC1MwuBuLufjIwzcym76f5d4CCoUkm2eq+l2sZU5TLgqljoo4ig+TS+ROpLM3n5kfWRB1FREREJKtF0QO6ELg73H4QOK23RmZ2NtAC1PZ1IjO71syWmNmSurq6gc4pWaC9K8kjK7fxzqMqSWj47YiVl4hz3ZnTeP71ep5btzPqOCIiIiJZK4pP3EXA5nC7Hhjfs4GZ5QJfBm7Y34ncfZG7z3f3+RUVFQMeVEa+J16to6UzyflHV0YdRQbZBxZMorw4V72gIiIiIhGKogBtZt+w2uI+MtwA3OLuDUOWSrLS/S9vZVRhDidNGxt1FBlk+TlxPnb6NJ5as4O/btgVdRwRERGRrBRFAbqUfcNujwFqemnzduCTZvYYMM/MfjI00SSbdHQneXjldt45u1Kr32aJD540mdGFOdz8l9eijiIiIiKSlaL41H0PcJWZfQ+4DHjFzG5Mb+DuZ7j7QndfCCxz949GkFNGuCdf3UFzRzfnafht1ijKS/CR06by6Oo6Xt60O+o4IiIiIllnyAtQd28kWIjoWeAsd1/u7n1ejiUsQkUG3P1/20ppfoJTDi+POooMoatPmUJpfoIfqBdUREREZMhFMu7Q3Xe5+93u3ucKtyKDqbM7xUMrtvGOoyrJTWj4bTYpzc/ho6dP4+GV23ihpj7qOCIiIiJZRZ+8JSs9vWYHTe3dWv02S3309KmML83jxvtW4u5RxxERERHJGipAJSvd//JWSvISnHqEht9mo8LcBP/4jhks39jAH1/aGnUcERERkayhAlSyTlcyxYMrtnHO7PHkJeJRx5GIvO+4icysLOFbD6yiozsZdRwRERGRrKACVLLOM2t3sruti/OOroo6ikQoHjO++K5ZbNrVxi+eWR91HBEREZGsoAJUss6fXt5KcV6C06dr+G22O316BWceWcHNj7xGQ2tn1HFERERERjwVoJJVupMp/vxKLW+bNY78HA2/FfjX82fR3NHNzY+siTqKiIiIyIinAlSyyrPr6tnV2sV5czT8VgIzKku4/IRqfrG4hvU7W6KOIyIiIjKiJaIOIDIY7nxuQ6/773lxM7nxGNsa2/tsI9nns28/kt8v28JND6zmh1ceF3UcERERkRFLPaCSNZIp55Utu5lRWUJOXP/pyz7jSvO57ozDue/lrSxdvyvqOCIiIiIjlj6FS9ZYv7OFls4kcyaURR1FMtDHzpjKuJI8brxvBamURx1HREREZETSEFzJGiu2NpKIGUeOL446igyBQxlifcb0Cn7z103c8fwGrjpp8iCkEhEREclu6gGVrODurNzayOEVxeQltPqt9O7YSaM4fXo537h/JRvrW6OOIyIiIjLiqACVrFDb2M6u1i5mV5VGHUUymJnxzffNJWbGF/7vJdw1FFdERERkIKkAlaywcmsjBsysKok6imS4CaMK+NfzZ/HM2p3c+bxWShYREREZSCpAJSus3NrExNEFlOTnRB1FhoEPLKjmtCPK+fp9K9m0S0NxRURERAaKClAZ8Xa3dbG5oU3Db6XfzIxvXHw0AP/y25c1FFdERERkgKgAlRFv5dZGAGapAJWDUD2mkH85fxZPvraDX7+wMeo4IiIiIiOCClAZ8VZubWRsUS4VJXlRR5Fh5ooFkzjl8LHceN9KNje0RR1HREREZNhTASojWntXknV1LcyuKsXMoo4jw0wsZnzrfXNJuWsoroiIiMgASEQdQGQwvbqtiaQ7sw/T8Fvpnzufe/PKt2+fNZ4/LN/CJ+98kdOOKO/z2CtOnDSY0URERESGPfWAyoi2YmsjRblxqscURh1FhrETp45hdlUpD/xtK2vrmqOOIyIiIjJsqQCVESuZcl7d1sTMqlJiGn4rb4GZccnxExlblMddz2+gobUz6kgiIiIiw5IKUBmxXt/RQntXSpdfkQGRnxPngydNpjvl3PHcBrqSqagjiYiIiAw7A1aAmlnczC4bqPOJvFUrtjaSEzcOryiOOoqMEBUleVx6fDWbG9r4w/ItWpRIRERE5CAddAFqZv9nZkea2eXh7aPM7P8BBnxyoAOKHAp3Z+XWRo4YV0JuQh39MnBmH1bKWTMqWLp+F8/X1EcdR0RERGRYOZRP5hUEq+d+2cxOBv4b+JW7dwMakyYZYevudna3dTG7qiTqKDICvW3WeI4cX8wfl29lw86WqOOIiIiIDBuHUoB2u/sK4CKgA7gBuMTM1M0kGWPF1kYMmFGp+Z8y8GJmXD5/EmWFOdzx/AYa27uijiQiIiIyLBxS0Whm+cDXgJXA/wOqCYbgakKUZISVWxuZNLaQ4jxd6lYGR0FunCtPnER7V5KfP11Da0d31JFEREREMt5BFaBmdiUwA0gCzwC/JugJHQNcB0wws0+Y2T8MdFCR/tq0q5Wtu9u1+q0MuqqyAq46aQo7mjv42TM17G5TT6iIiIjI/hxsD+jhQBvwELAUGAf8G1AKVAF54e+qAcwoclAeXrENgFkqQGUIHDGumCtOnETt7nau+dnztKgnVERERKRPB1WAuvtXgY3Ax4AvArnAs0Chu38ZeN3dv+zuNwx4UpF+emR1HeXFeZQX50UdRbLEzMpSLj+hmuWbdvOR216grTMZdSQRERGRjHQoc0Dd3V8DPgV8n2Ae6LcHNJXIIWrt7ObZdTuZWanVb2VozZlQxvcuO4bnXq/nutuX0tGtIlRERESkp0MpQGNmNg74P4Li83KCobegRYgkYovX7qSzO8WR41WAytC7cN4EvnXxXJ54tY5P3fkiXUldmUpEREQk3aEUoGuAQuB77v4C8O/Ap8xsFJA/UMHMbIyZnWNm5QN1Thn5Hl29naLcOFPGFkYdRbLUZSdU89ULj+KhFdu4/s4X1RMqIiIikuZgV8E14L/dvQa4A8Ddm4DjgEbgm2G7q/d3XVAzu9XMFpvZl/q4fzTwR2AB8KiZVRxMTslO7s6jq+o49YhyEnFdllaic/XJU/jKu2fzwCu1fPS2JbR2amEiERERETj4HtA4wbxPgGfMbKWZrQBeAVYAx5nZxwmG5cZ7O4GZXQzE3f1kYJqZTe+l2Vzgc+7+/wF/JihwRfbrte3NbG5o46yZ46KOIsI1p07lpkvm8vSaHVx16/PsbtUlWkREREQOdhXcboJrgALUuvss4DLgFHefCXwNOA+43N37+rS1ELg73H4QOK2Xx3nc3Z81szMIekEX93YiM7vWzJaY2ZK6urqDeSoyAj26ajsAZ81QASqZ4bL51dxy5XG8vGk3ly9aTF1TR9SRRERERCKVOIRjjjOz3wATzayAYChuyszGE/SC/qu7N+/n+CJgc7hdTx+9m+Fw38uBXUCvxay7LwIWAcyfP18LIGW5R1dvZ1ZVKZVlAzYVWeSg3Pnchl73X3nSJG5/dj3nfv8JPnzaVEYX5r7h/itOnDQU8UREREQidygT5ZYBnwfagdPD7RuAa4D/AX5oZmfu5/hmoCDcLu4rgwc+CbwEvOcQckoWaWzvYknNLs6aoenCknmmjyvhw6dOpaWzm0VPrGN7U3vUkUREREQicbCLEOUQzN9cB9wHnA+cC7wTuABoA94H/NjMivs4zVL2Dbs9Bqjp5XG+YGZXhzdHAQ0Hk1Oyz1Ov7aA75Zr/KRlr8tgiPnb6NJIp58dPvs4ODccVERGRLHSwc0C7gCvM7Jvu/k2CxYL+CTgeeNzd73P3DcB/7GcY7j3AVWb2PYL5o6+Y2Y092iwK2zxBsJjRgweTU7LPo6u2U1aQw7HVo6KOItKnqrICPnb6NHDn1qdfp6G1M+pIIiIiIkPqYHtAE8BG4JRwVx5gwPXA+8zsl2aW5+539HUOd28kWIjoWeAsd1/u7l/q0WaXu5/j7me4+yfcXfM7pU+plPPYq3WccWSFLr8iGa+iJI9rTp1KR3eSW596naZ2rY4rIiIi2eNgP62vIVhoqCK8/Eo58Cfg18A84CTgxwc6SVhg3u3utQf5+CJvsmJrI3VNHZr/KcPGYaMK+LuTp9DY3sXPnq7RJVpEREQkaxzsENwpBHM8rwl/GoBrgRvcfZa7TweqzOx9Ax1UpC+PrtqOGZxxpApQGT4mjy3igydNpq65gw/9/HlaOrqjjiQiIiIy6A5lvOL5wCeAjwNlBENwLzKzpeH9XyYYkisyJB5ZvZ25E0dRXpwXdRSRgzJ9XAmXz69m+cYGrv3lEtq7kgc+SERERGQYO+gC1N2/7e5Xu/uHgOvdfZ27XwOcFd7/LPDJgY0p0rv6lk6WbWzQ8FsZtuZMKOOmS47h6TU7uf5XL5JMacq7iIiIjFxvacUWd38obbsxbfuVt3Jekf564tU63OGsGbr8igxflxw/ka+8ezYPrdjG9x9+Neo4IiIiIoNGS4bKsPbo6u2UF+dy9ISyqKOIvCXXnDqVS4+fyM2PrOHR1dujjiMiIiIyKFSAyrCVTDmPv1rHmUeOIxazqOOIvGVfvXAOMytL+Oyvl7G5oS3qOCIiIiIDTgWoDFvLNu6iobWLs2Zq/qeMDAW5cW658ji6k84n7/grnd2pqCOJiIiIDCgVoDJsPbqqjnjMOP0IFaAyckyrKOamS+aybGMDX79/ZdRxRERERAaUClAZth5dvZ3jJ42mrDAn6igiA+r8o6u45tQp/PyZGu57aWvUcUREREQGTCLqACKHYltjO69saeQL586MOorIW3bncxvetG9qeRHVowv43N3LWLu9mfKS3q9ze8WJkwY7noiIiMiAUQ+oDEuPhauEav6njFSJWIwPLJhEPGbc+fwGzQcVERGREUEFqAxLj66qo6osnxnjS6KOIjJoRhXmctn8amob23ngldqo44iIiIi8ZSpAZdjp7E7x1JodLJwxDjNdfkVGtiPHl3Dq4WN5dt1O1mxvjjqOiIiIyFuiAlSGnSXr62nu6OasGRp+K9nhHUdVUl6cx//9dRPtXcmo44iIiIgcMhWgMuw8umo7ufEYpx5RHnUUkSGRE49x6fETaWzr0qq4IiIiMqypAJVh59HVdZw4bQxFeVrEWbJH9ZhCzpxRwdINu1i5tTHqOCIiIiKHRJ/gJWP1dmmK+pZO1mxvZsb4kl7vFxnJzp45jlVbm/jdi5uZNKZQX8KIiIjIsKMeUBlWXt3WBKDVbyUrJWIxLp0/kbbOJH9YviXqOCIiIiIHTQWoDCura5sYU5TL2OLcqKOIRKKqrIC3zRrHy5t3s3xTQ9RxRERERA6KClAZNrqSKdbtaGZGZYkuvyJZ7fTpFVSPLuAPy7awvbE96jgiIiIi/aYCVIaNdXUtdCVdw28l68VjxiXHV9OdSnHDb1/G3aOOJCIiItIvKkBl2Fi9rYmcuDG1vCjqKCKRqyjJ451HVfLIqu3cvWRj1HFERERE+kUFqAwL7s6r25o4vKKYnLj+sxUBOGnaWE6aNoav3ruCjfWtUccREREROSB9kpdhYUdzJ/UtnRyp4bcie8XM+PYlx2BmfP43L5FKaSiuiIiIZDYVoDIsrK5tBGBGpQpQkXTVYwr58gWzWLxuJ7ctrok6joiIiMh+qQCVYWH1tibGleQxulCXXxHp6bL51Zw1o4Jv/mkVa+uao44jIiIi0icVoJLxOrqS1OxoVe+nSB/MjG++by75OXH+8e7ldCdTUUcSERER6ZUKUMl4a+uaSbouvyKyP+NL8/naRXNYtrGBHz2xLuo4IiIiIr1SASoZb1VtE3mJGJPH6vIrIvvz7rlVvOvoKr7/8Kus3NoYdRwRERGRN1EBKhktFV5+5YhxxcRjFnUckYxmZnztojmUFeTymbuW0d6VjDqSiIiIyBskog4gsj9bGtpobO9mVlVp1FFEMtKdz214074L5lbx82dquPrW57no2Am9HnfFiZMGO5qIiIjIm6gHVDLaiq2NxAxmav6nSL8dOb6EM6ZX8HxNPS9taog6joiIiMheKkAlo63Y0sjksUUU5qmzXuRgnDN7PJPGFPK7Fzezs7kj6jgiIiIiQEQFqJndamaLzexLfdxfZmZ/MrMHzex3ZqaLP2ahnc0dbG/qYLaG34octHjMuPyEaszgrhc26tIsIiIikhGGvAA1s4uBuLufDEwzs+m9NLsS+J67vwOoBc4dyoySGVaEq3hq/qfIoRldmMslx01kc0MbD7xSG3UcERERkUh6QBcCd4fbDwKn9Wzg7re4+0PhzQpge28nMrNrzWyJmS2pq6sbjKwSoZVbG6kszWdMkTrARQ7V7MPKOPnwsTyzdqcuzSIiIiKRi6IALQI2h9v1wPi+GprZycBod3+2t/vdfZG7z3f3+RUVFQOfVCKzs7mD9TtbmX2Yej9F3qrzjqrksFH5/GbpJhpaO6OOIyIiIlksigK0mf+/vTsPk6ss8z7+vWvv6n1Np5PudPaFkISQBWICkU1UlMUFwWFcYHBlxnH01RlndXjndWYYXx0RFAVhUFABRRQXFg3BAIkJkIQtpLMvdHpL70ttz/xRlU6nydIknT69/D7XVdc5VX2q6ld9Oqm663nOfSArs55zrAxmVgR8C/j4EOWSYeTJ1+pwaPqtyGAI+H1cs7iKlHPcv243cR0PKiIiIh7xogDdwOFpt/OBnf03yDQdegD4W+fcrqGLJsPFYy8fID8rSEV+xOsoIqNCcU6Y9y2cyN6DXWpKJCIiIp7xogB9GLjOzL4OfBB42cxu7rfN9cBC4CtmtsrMrh7qkOKdrliSP9bUM3t8HmbmdRyRUWPuhHwumzeeV99o5cs/24xzzutIIiIiMsYM+ckVnXOtZrYSuBj4D+dcLbCx3za3A7cPdTYZHlZvrac7ntLpV0ROg3OnltARS/Lghr0UZYf4u3fN9jqSiIiIjCFDXoACOOcOcrgTrsgRHnv5AHmRAJNLsr2OIjIqXTirjImFWdyxejtF2SE+ef5UryOJiIjIGOFJASpyLIlkit+/doALZpXh92n6rcjpYGb883vOoLkzztd+8xoFWUE+tKTK61giIiIyBqgAlWFl/a6DHOyMc8kZ5TR3xr2OIzJq+XzGLR+YT3NXnL/7+WYKokEunTve61giIiIyynnRhEjkmB5/5QAhv4/zZui8riKnWyjg4zt/tpD5lQX85f0v8pM/7VZjIhERETmtNAIqw4ZzjsdeqeVt04rJCetPU2QoREMBfvDRxXz6R8/zpYc2s3Z7EzdfOZdo6Oj/Bu9bu/ukn+vapZrmKyIiMtZpBFSGjS0H2tjT1MXFc8q9jiIyphREQ9x7/VL+6sLp/PzFfbz31jW8fqDN61giIiIyCqkAlWHjsZcPYAYXzSnzOorImOP3GX998Qzu/fhSmjtjvPfWP/LA+j1exxIREZFRRgWoDBuPv3KABZUFlOVGvI4iMmYtn17Cr/9yBQsqC/jig5v4wgMb6ehJeB1LRERERgkVoDIs7D3YyeZ9LVw8Z5zXUUTGvLK8CD+8fik3XTCNh57fy8pbVvGTP+0mmVKDIhERETk1KkBlWHhk434ALjuzwuMkIgIQ8Pv4m0tm8tCnllFZmMWXHtrMu//7abbW6dhQEREROXkqQMVzzjl+/vw+Fk0qpKo46nUcEeljYVUhD31qGbdeexYdsQQ/WLOTu5/ZwYHWbq+jiYiIyAikAlQ89/L+VrbWtXPFWRO8jiIiR2FmXDavgic+fz7vnFvO7qZO/vvJrTyycT/d8aTX8URERGQE0ckWxXMPv7CPoN9495njvY4iIscRDvhZMb2UhVWFPPHqAdZub+SV/S1cNq+CMyryMDOvI4qIiMgwpxFQ8VQy5fjFxv2snFlGYXbI6zgiMgDZ4QCXL5jAJ8+fSnY4wH3rdvPD53bR3BnzOpqIiIgMcypAxVPPbGugvq2HKzX9VmTEqSyK8umV07j0jHJq6tv5xpNbWVPTQMqpW66IiIgcnQpQ8dTPX9hHbjjABbPKvI4iIifB7zPOm1HKX104g+riKI9ufoM7Vm+ntSvudTQREREZhlSAimc6Ywl+91It7zpzPJGg3+s4InIKirJDfOTcaj64qJLalm6+vaqGPU2dXscSERGRYUZNiMQzj79ygI5YUt1vRTxw39rdg/6YZsaCygLK8yLc+9xO7nh6O1cumMDCSYWD/lwiIiIyMmkEVDzz8Av7GJ8fYenkIq+jiMggKs+P8JmV05hUHOXB5/fy6Kb9JFM6LlRERERUgIpHGtp7WL21gcsXTMDn06kbREabaDjAx5ZN5typxazZ1sg9z+5Ul1wRERFRASre+NXG9IiIut+KjF5+n/GeeRVcddYEdtR3cPm317CjocPrWCIiIuIhFaDiiZ+/uJ/Z4/OYWZ7rdRQROc0WVRdxw4rJtHUneP/tz7BxT7PXkURERMQjKkBlyG2vb2fjnmauPKvC6ygiMkQmFWfz4CfPJSvk55rvPceqLXVeRxIREREPqACVIffwi/sxg/fO1/RbkbFkSmkOP/vUMqqLs7nhnvU8tGGv15FERERkiKkAlSHlnOPhF/axbGox5fkRr+OIyBAry4vwk0+cw5LJRfzNAxu5fdU2nFOHXBERkbFC5wGV067v+QZ3NXawu6mTxdVFp+U8hCIy/OVGgvzgY4v5wgOb+PffvsaB1m7+4bI5+NURW0REZNRTASpD6tntjYQDPuZW5HkdRUQ8FA74+ebVCyjNCXPXmh3sb+7iGx9aQDSktyUREZHRTFNwZci0dMV5aV8LiyYVEg76vY4jIh7z+Yx/uGw2/3jZHJ549QAf/O6z1LZ0ex1LRERETiMVoDJk1u5oxDk4d2qJ11FEZJgwMz6+fDLf/8gidtR3cMW31/DSvhavY4mIiMhpogJUhkQ8mWLdjiZmledSlB3yOo6IDDMXzBrHg59ahs/gA995lsdfOeB1JBERETkNVIDKkNi4p5nOWJJl0zT6KSJHN3t8Hg9/5m3MGJfDjfeu53urt6tDroiIyCijbg9y2jnneGZbI+V5EaaUZHsdR0Q8MtDO11eeNZFEyvF/f/0qv3mplvv+YikRHTcuIiIyKmgEVE677Q0d1LZ2s2xqMWY6zYKIHF8o4OOaJVVcMKuM53cf5KrbnmF3Y6fXsURERGQQqACV0+6ZmgaiIT/zKwu8jiIiI4TPjItmj+PPz53EvuYuLvvW0zz5qo4LFRERGek8KUDN7E4ze9bM/v4424wzs6eHMpcMvl2NHbxW28aSyUUE/fq+Q0TemlnlefzqpuVUFkW5/p713PK7LSRTOi5URERkpBryisDMrgL8zrlzgSlmNv0o2xQC9wA6YHCEu+eZXZjBOZOLvY4iIiNUZVGUhz61jKsXVXLrH2r4yF3raGzv8TqWiIiInAQvmhCtBH6aWX8MWA5s7bdNErga+MXxHsjMbgRuBKiqqhrUkHLq2rrj/HT9Hs6ckE9eVtDrOCIyQh1qXjS/soB4MsUjG/dzwX89xbVLqqgsih73vtcu1XuDiIjIcOLFnMhsYF9mvQkY138D51yrc+6EZyJ3zt3hnFvknFtUWlo6yDHlVD24YS/tPQmWTdWpV0RkcCyqLuIT50/FZ3DH6u08t71Rp2oREREZQbwoQNuBrMx6jkcZ5DRLpRz3PLMKOIpTAAAZyUlEQVSTs6oKTjhCISLyVkwoyOIzb5/GtLIcHtm4nwc27CWWSHkdS0RERAbAi+JvA+lptwDzgZ0eZJDT7A9b6tjZ2MnH3zbZ6ygiMgpFQwGuO3cSF80uY+OeZm5/qoaGNh0XKiIiMtx5UYA+DFxnZl8HPgi8bGY3e5BDThPnHN98cisV+REunVvudRwRGaV8ZlwwaxwfXVZNW3eCb6+q4eX9Jzx6Q0RERDw05AWoc66VdCOi54C3O+c2OueOejoW59zKIYwmg+TXm2vZtLeFv754hk69IiKn3fRxuXz27dMozQ3zo7W7+eWm/SSSmpIrIiIyHHnRBRfn3EEOd8KVUSSeTPGfv3uNmeNyuWrhRK/jiMgYURANceOKKfzu5VrWbGtkV2MH1yxWB1wREZHhRsNTMqh+/Kc97Gzs5EvvnInfZ17HEZExJOD38e55FVx3ziQOdsS59Q81/OLFfSe+o4iIiAwZFaAyaDp6Enzzia0smVzE22eWeR1HRMao2ePzuOmCaZTnRfirH7/Ilx/aRFcs6XUsERERwaMpuDI6ff/pHTS093DHn5+NmUY/RcQ7BdEQN6yYQm1rF7et2saGXQf5zw/MZ0FlgdfRRERExjSNgMqgaGjv4Y7V27j0jHIWVhV6HUdEBL/P+OI7ZvE/H19CW3eCK29bw7/88mXaexJeRxMRERmzVIDKoLj19zV0J1J88dKZXkcRETnCiumlPP7587junEnc/cxOLvn6Uzz56gGvY4mIiIxJKkDllO1q7OBHa3dx9eJKppbmeB1HRORNciNBvnr5XB785DJyI0Guv2c9n/nR89S1dnsdTUREZExRASqn7JbHXifg8/G5C6d7HUVE5LjOnlTIL29azhffMZPHXz3AhV9/im8+sZWmjpjX0URERMYEFaBySjbvbeGXG/dz/fLJlOVFvI4jInJCoYCPz7x9Gr/73HksqS7i/z/xOsu+9iT/+IuX2NXY4XU8ERGRUU1dcOWkpVKOf330FQqjQW48f4rXcURE3pLJJdnc+dHFvH6gje8/vZ0fr9vDD5/bxaVzy/mLFVM4Sw3VREREBp0KUDlpd63ZwbodTfzH++aRFwl6HUdE5KTMGJfLf7x/Pl+4ZCZ3P7OTHz63i19vrmV6WQ7nzShlxfQSlk4uJivk9zqqiIjIiGfOOa8zDIpFixa59evXex1jzNhS28Z7bv0j588o5Y7rjn/ez/vW7h7CZCIip6YnkcRnxhOvHmDtjiZiiRShgI8l1UWsmF7CouoippZmUxANeR1VRERk2DCzDc65RSfaTiOgMiB9i8hEMsXtT20j6PexuLqI+9ft8TCZiMjgCgf8XLu0io8sq6Y7nmTdjiZWv17P01sb+H+/ea13u8JokOqSbCaXZDOlJJuq4mzKcsOU5oYpyw2TEw4c98s5ERGRsUgFqLxlT75Wxxst3Vx3ziRywvoTEpHRKxL0c96MUs6bUQrAgdZuXtrXwo6GDrY3dLCzoYNntzXys+f3vem+Qb+REw6QGwmSGwkcsZ4bCZAbDlKUHeqd2nvt0qohfW0iIiJeUPUgb8nOhg5Wv17PokmFzB6f53UcEZHT4kSHDkRDAeZW5DO3Ih+AWCLFwc4Ybd0J2nvitHUnMusJWrvj1Lf1sL2+g6548iiP5ackJ8wLuw8yuTQ9mjpjXC7Vxdn4fBpBFRGR0UUFqAxYTzzJAxv2UJgd4t1njvc6jojIsBEK+BiXF2HcCb6XSyRTtPckMgVqnMaOGA3tMRrae3jq9Xoe2LC3d9vcSIB5E/OZN7GA+Znl+PyIpvWKiMiIpgJUBuzRzW/Q3BnnxvOmEA6qG6SIyFsV8PsoiIaO2cCoJ56koT3GGy1d7D3YxY7MFN9Upl9gXiRAdUk2U0pymFKaTXF2iA+fM2kIX4GIiMipUQEqA/LK/lbW7zrI+TNKmVSc7XUcEZFRKRz0M6EwiwmFWSyqTt8WT6aobelmz8FOdjd1sqO+g017W4B0QbpuZxPnTClm+bQSKoui3oUXEREZABWgckLb6tv52Qt7GZ8f4cLZZV7HEREZU4J+H5VFUSqLoiybCs45GtpjbG9oZ0dDB89sa+QXL+4HoLo4yorppSyfXsK5U4t1jmYRERl2VIDKce1r7uK676/FgGsWVxHw+byOJCIyppkZpZnTvSydXMw1SyqpqWvn6a0N/LGmgYee38u9z+3C7zMWVBawfFoJK6aXsKCygIBf/4eLiIi3zDnndYZBsWjRIrd+/XqvY4wq9W09fPC7z9LQ3sNHzq2moiDL60giInICiVSK3U2d1NS1U1PXzr6DXTggHPAxpTSH6WU5TCvL0fGjIiIyqMxsg3Nu0Ym20wioHFVLZ5zr7lxLbUs3P7xhCVtq272OJCIiAxDw+dJNikpyuGQOdMYSbKvvoKaujZq6dl59oxWAgmiQl/a3sHxaKW+bVnzMxkgiIiKDSQWovElHT4KP3b2O7fUd3PnRRZw9qUgFqIjICBUNBThzQj5nTsjHOUdTR4ytmdHRX218g/vX7cEM5k3IZ/n0ElZML2VhVSGhgKbriojI4FMBKkfojif5xL0beHFPM7d9eCErppd6HUlERAaJmVGcE6Y4J8w5U4r54KKJbNzbnD5+dGsD33lqO9/+wzaiIX9vZ90V00uYVpaj84+KiMigUAEqvXoSSf7y/hf4Y00Dt3xgPpfOHe91JBEROY1+un4vAGW5Ea5aOJF3nTme7fUd1NS3sXFPM79/rQ5In+5lWlkO1cXZVJdkc9MF01SQiojISVEBKgDsauzgs/e9wOZ9LfzTe+bw/rMneh1JRESGWCToZ05FHnMq8gA42Bmjpq6drXXtvFbbxvO7mwH4n2d3sWRyIYuri1gyuYhZ5Xn4fSpIRUTkxFSACr/atJ8vP7QZn8F3rzubd5xR7nUkEREZBgqjIRZXF7G4ugjnHPVtPexs7MQM1u1o4tebawHIDQc4uzpdkC6dXMSZE/MJB/wepxcRkeFIBegY1h1P8tVfvcJ9a3dzVlUB37rmLCYWRr2OJSIiw5CZUZYXoSwvwrVLq4D0uaL/tKOJdTubWLejiVVbtgAQCvhYUFnAWVUFLJhYwLzKAiryI5q2KyIiKkDHqpq6dj573/O8VtvGJ86fwhcumUlQJygXEZEBuG/t7iOuz63IZ25FPh09CXY1drCzsZOdjR1s2HmQZOZ84znhAEsnFzG/soAzKvKYWZ7LhIKsUVmU9v/9DNShwl5EZDQzl3ljGOkWLVrk1q9f73WMYe+uP+7gue2NrNpST8BvfODsSmaW53odS0RERqFEMsUbLd3sbe5ib1MnbT0JttW3c+ijR24kwMxxucwsz2VWeS7TynKZVBylPC+Cb4QcU+qco6E9xv7mLvY3d7GvuYuntzbQHU/SFU+ml7EkXfEUiVQKnxkG6aWll36fEQ35mT0+j8JokIJoiMJokMLs0OH1aIiCaJCccGBUFu0ip9vJfjEE+nJooMxsg3Nu0Ym20wjoGNHSFefuNTv5zlPb6IonmVWey+ULJpCfFfQ6moiIjFIBv4/KoiiVRVGYUsy1S6to646zpbaN12rbMstWHtm4nx+tTfTeLxTwUVUUZVJRlKriKFVF6aK0LC9MWW56OVTHmHbHk5nisru3wOy73N/STSyROuI+Pks3dMoK+skK+YkE/RREQwR8hgNSzuHc4WUilaIzlmTj3mYOdsRo7U4cPQwQ9Bv5WSGKsoMUZ4cpyglRnB2iKPvQMpxez9xeEA2pQZSIDCsqQEe5gx0x7lqzg7vX7KStJ8Hs8Xm8fWapjvUUEZEh13cEwmfG7PF5zB6fh3OOlq449e09NHXEaGqP0dgR4+X9razeWk88+ebZWoXRIGW5EfKjQfKzguRFMsusAPlZQcIBPwG/EfQbAZ+vd5lyjp5Eiu54kp5EKnNJ0t6doKkj/byNmRyN7THaeo4sBs1gXG6EioIIcyfk844zyplQmEVFfhYVBVlUFER4dNMbpzRKmUw5uuJJOmMJumJJOmPp9c4+6x096cJ4a10bHT3p0dajMSAr5Cc7HCA7FCA7fOT6pXPLGZcX6S3w1TxKRE43TcEdhXoSSZ7d1sjjrxzg4Rf20RFL8s655Xz2gmls3NPidTwREZEBc87REUuyfFoJB9q6qWvt5kBrD3Vt3dS19tDcFaf10KU7QXvPsUcPj8fvs95RxOKc9EhiQ3sPOeEABVlB8qNBCrJC5GUFCPiGX8+EZMr1FqYdsfTvoaPn8PX+612xJEf7BFicHUoXpPmZS6Y4HZcfYXx+hHF5EfIimgYsI8/RpuAe+v+lpTPOwc4YzV1xmjtjNHfG6Ygl8JsR8BuTirMJBXyE/T4iIT+TiqJMK8thamkOlUVRzTLI0BTcMaa5M8YfttTx+CsHeGpLPR2xJFlBP5ecMY5Pr5zWe5ynClARERlJzIyccIAX9zT33laSE6YkJ8yc8W/ePply9MSTxFOOVMqRdI5kypHKLM2MgM8I+n3pEVJfeun3Gb4RXFT5fUZuJEhuZGCH1qScozOWpL0n0aeAj9PSlb7+6hutPLe9kc7Ym0dWg34jLxJkxrhcyjNFaXlemJLccL/R6CB5kQABNTmUYSCWSFHX1k1tSzdvtHRT25pe7z97IOT3URANkh0OkHSOWCzFnqZOYskUsUR6unxTR+zw9gEfU0qymVqWw+zyXM6oyOeMijzK8iJD/RJHDBWgI9DBjljm2JlWthxo57XaVjbtbSGZcpTmhnnvgglcPKeMZVNLiAQ1lUZERMYOv8+IhvXx5kR8mcI+Jxyg/DgflBPJFK3d6aK0pfvwaHNLd4JYMsW6HU3UtXUfdZr0IVlBP6GAL33x91v2X8+MMvl91vvFQMCXvn7oEuiz9B1a9vvyoP8IrR3xs6Pf3v9+/b+PsCM3POL2vln65vRlRtB8ln4dPh8EfL7eux89lx1x/cht7IjbDm/z5tyHfrfBo/zeR+uIXTyZYt/BLnY0drCrId2Re0dDBzsbO9jd2Nk76h/y+xiXF+bMCfmU5oZ7m38VZAXJCvnf9PfTvwlRS2ecmvp2ttW1U1PfTk1dO5v2NvPopjd6tynJCXNGRV5v1++qoijVxdkURINjfgaBJ/9Dm9mdwBzgUefczSe7zUjmMt/EdidS9MSTh5fxFF3xBE0dcRrbezLHosRo7Oihvq2Hmrp26tp6eh+nIBpk5rhcPnHeFC6eM475EwtGTOdAERERGd4Cfh9FmSZHx5JyLj3FN5akO9an+2/m0hNPkUg5kqkUiaTLrLvMaFKi9/rhn6VIOUhlRq5TmYZNZpBKpZs2pUbHEWSe8Rl9CmUfeZHAEV8CHP5SwE/I7yN8jC8LjvWFgs9H75cC1q/zsx26rc860DtTIdVn1kIi6YglU/TE08drxzLHbHfHUzR3xjjYGeNgZzyznh7F73t0YXbIT3VJNnMn5DO1NIfxmWnlhdmhU5rxkB8NcvakQs6eVHjE7a3dcV7d38rLvZcW1tQ0kOjzB5sbCVBdnE1VcZSJBVm90/vzs4IUZI5pz88KEgr4CGZ+r0G/EfL7Rk3hOuQFqJldBfidc+ea2V1mNt05t/WtbjNS3HDPep7Z1kAydbjjXTLT9W6gcsKB3m52K6aXMrM8h5nlecwqz6UsNzxq/hhFRERk5PHZW5v+Oxj6dhJO9ftcdbzPWK7vka+u/8+O+aMjt+v3BC7znP0L5kPrzrnMz+i97VhZ+j/vkU/ljtzmGPc5lPFQYZ9MHV7v/SKg7/Xkkbcnko7ueIJEss9tvV8SpI74wiD5Vj7QDpKg3wgH/ORnBSnMTp+iqLIo2nu6oomFWVSXZFNdnE1JTqj3c/KpnIZloPIiQZZOKWbplOLe23oSSXY3drIrc37k3U2d7Gzs5OV9LTz+yoE3ddE+nqDf+Pf3zeOqhRNPR/wh48UI6Ergp5n1x4DlQP/iciDbYGY3Ajdmrrab2ZbjPG8J0HBSicUL2l8jj/bZyKL9NbJof40s2l8ji/bXyDOk++zDQ/VEA/C+f/M6wXFNGshGXhSg2cC+zHoTsPAkt8E5dwdwx0Ce1MzWD6QrkwwP2l8jj/bZyKL9NbJof40s2l8ji/bXyKN9NrJ50ZasHcjKrOccI8NAthEREREREZERxIvCbgPpKbUA84GdJ7mNiIiIiIiIjCBeTMF9GHjazCqAdwIfMrObnXN/f5xtzhmE5x3QVF0ZNrS/Rh7ts5FF+2tk0f4aWbS/Rhbtr5FH+2wEs/6dvIbkSc0KgYuB1c652pPdRkREREREREYOTwpQERERERERGXvU3EdERERkkJhZkZldbGYlXmcRERmORt0IqJk9wbGPbd3rnPuzocwjx6f9NfKZ2Z3AHOBR59zNXueREzOzccCDzrkVXmeR4zOzfODHgB/oAK52zsW8TSXHkjl86NHM5UPABc65em9TyYlk/k/8rXPuLK+zyLGZWQDYnrkA3OSc2+xhJDlJXjQhOt2+5px74mg/MLMr9GY+7Bx3f2WW+rA8TJnZVYDfOXeumd1lZtOdc1u9ziXHlvmAfA/p8y3L8Pdh4OvOucfN7HbgUuARjzPJsc0DPu+cey7zb20h8DuPM8mJ3cLh0//J8DUPuN859yWvg8ipGYtTcA+9mV8C1JJ+M5dhSh+Wh72VwE8z649x+PRJMnwlgauBVq+DyIk5525zzj2euVoK1HmZR47POfdUpvg8D1gCPOt1Jjk+M7uA9ICEGl4Of+cAl5nZOjO7MzMiKiPQmCtA9WY+4ujD8vCWDezLrDcB4zzMIgPgnGt1zrV4nUPeGjM7Fyh0zj3ndRY5PjMz0u9bB4G4x3HkOMwsBPwD8GWvs8iA/Am4yDm3BAgC7/I4j5ykMVeAHqI385FBH5aHvXYOT1vKYQz/nyJyuphZEfAt4ONeZ5ETc2mfATYB7/U6jxzXl4HbnHPNXgeRAdnknHsjs74emO5lGDl5Y/LDot7MRQbNBg5Pu50P7PQuisjokxmheQD4W+fcLq/zyPGZ2ZfM7M8zVwsAFTbD20XAZ8xsFbDAzL7vcR45vnvNbL6Z+YErgI1eB5KTM+bmTuvNXGRQPQw8bWYVwDtJH58hIoPnetKNbL5iZl8BbnfO/cTjTHJsdwA/NbMbgJdIHxsvw5Rz7rxD62a2yjl3g5d55IS+CtwHGPDIsZpYyvA3Gk/DctEJuqqOB/6Nw9+a6M3cQyfaX865hzPrq5xzK4c0nAxIplHUxcBq55yaOIiIiIjIMY3GAvQB0s2FjuZF59znhjKPHJ/2l4iIiIjI2DHqClAREREREREZnsZkEyIREREREREZeipARUREREREZEioABURETlJZvb+TCOuwXisz5pZxMx+b2ZnmtkXzSzPzL5rZucd4z5mZjl9rvvMLHsw8oiIiJwOKkBFREQGIFPcBc3M+tx8OfCxPtuYmYXMzJe5/oSZrTWzVf0ua82s/yk6AsDfAwkgG/iQc64VuADYe4xYK4EX+hSdVcA+Mwtmnj98aq9aRERkcI2584CKiIicpAXA3UDCzFLAHKAGONvM/hl4HfADQeBq4GWgB8g9xuPFD62YWQTYDzigkHRhuToz8pnjnNue2S7snOvp8xifA74B/MjMJgJZmed/NlMnB81ssXMudqovXkREZDCoABURERkA59zzZjYf+Brpou83wBVASea2vwbKnHNP9rnbetKFZne/h4uQLhQPCQHnAUuARcCrQBPwKcBnZutJj262mdkC51ybmb0DeC9wPfBD4J3ADOBDwC2Zx/2lik8RERlOVICKiIgM3GdJj07+01F+lgvcb2YfJV1Q/g3QwpuLz0OCZvY06VHMTcB2YEJm+2bgILAMuNU5969m9mPgvzLF53jge0Ar6Sm75cD/AT4NHJraexuwGug4hdcrIiIyqFSAioiIDICZlQOfAC52znWbWYD0lNsQEHTOPWNm7wf+C1jmnHvYzL4PNJIeBR2XeagDpEc/i5xzl2ceezLQQLqI/CrpAveKzHZnZ+5XBWzLrJ8B/AB4X+Z6EpjK4ZFPMtdTg/cbEBEROXUqQEVERAbAOVdrZpcDvzWzOOki8LdAGKjMTJP9b2CJc85l7raQ9IhmjPToJsA+0kVrqM/DF5GewvsvpBsE/pJ00boMWJXptJvrnGvKZHkCeMLM3tfnMQ6Qnop7yOcH5YWLiIgMIhWgIiIiA7cdWEx6eu0fnHNfBDCzm4D3APf1KT4h/T77MOmpsiszt60C8kgfqwmAc26DmS0H1gBLgXcA73LOdZnZzzKP8fsTZOsi3RSp73UREZFhxY58nxQREZGBMLNvADmku9cuAy53znX0+bkBF5EeIQV4d2b5aGYZc8491mf76cCXSE+dnQX8o3Pue5nbXyc99feJfhleApaTboS0Adjc58dnAjOdc7WD8HJFREQGhUZARURE3oJMYTmL9Lk5byJdYP6A9OlYaoBa51wKmALczOGRyENTcGdnlkEzW+uca8lcrwF+TPoY0K8A88zsKtLnBv0CcIeZfcQ593TfOKSn8hrwgnNuZZ+cq0h30A045xKD9fpFREROhUZARUREBsDMikiPXk4EXiQ9LfYnmR9fA1xJeiS0AbiQ9PGYraTP7QlHHgMK6aIxj3QjofbMY78I/HvmeNM/Az4KfNo597qZrSRdmF5xaKQ1U/B+F7iKdCOi/nzA7c65e0/x5YuIiAwKFaAiIiIDZGaVwL7MCOextslxzrUPYSwREZERQwWoiIiIiIiIDAmf1wFERERERERkbFABKiIiIiIiIkNCBaiIiIiIiIgMCRWgIiIiIiIiMiRUgIqIiIiIiMiQ+F9DC6B4bggmWwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 936x648 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化缩放前后的分布对比\n",
    "# 在整个变量上操作（不分训练集与测试集）\n",
    "\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "fig, ax = plt.subplots(2,1, figsize = (13,9))\n",
    "sns.distplot(X[:,0], hist = True, kde=True, ax=ax[0])\n",
    "ax[0].set_title('原分布直方图', fontsize=12)\n",
    "ax[0].set_xlabel('变量数值', fontsize=12)\n",
    "ax[0].set_ylabel('频率', fontsize=12); # 这个变量为长尾分布\n",
    "\n",
    "model = RobustScaler(with_centering = True, with_scaling = True, \n",
    "                    quantile_range = (25.0, 75.0))\n",
    "model.fit(X[:,0].reshape(-1,1)) \n",
    "result = model.transform(X[:,0].reshape(-1,1)).reshape(-1)\n",
    "\n",
    "# 可视化整个变量上缩放的结果\n",
    "sns.distplot(result, hist = True, kde=True, ax=ax[1])\n",
    "ax[1].set_title('变换后的分布直方图', fontsize=12)\n",
    "ax[1].set_xlabel('变量数值', fontsize=12)\n",
    "ax[1].set_ylabel('频率', fontsize=12); # 分布一致，但是变量的尺度已发生变化\n",
    "fig.tight_layout() "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Power Transform 幂次变换 (非线性变换)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以上介绍的所有缩放方法都保持原来的分布。但正态性是许多统计模型的一个重要假设。我们可以使用幂次变换将原始分布转换为正态分布。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Box-Cox 变换"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Box-Cox 变换只适用于正数，并假设如下分布：  \n",
    "$x_i(\\lambda) = \\left\\{\\begin{matrix}\n",
    " \\frac{x_i^\\lambda - 1}{\\lambda}& if \\lambda \\neq 0\\\\ \n",
    " log(\\lambda)& if \\lambda =  0\n",
    "\\end{matrix}\\right.$  \n",
    "考虑了所有的 λ 值，通过最大似然估计选择稳定方差和最小化偏度的最优值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:06.218313Z",
     "start_time": "2020-02-29T21:35:06.189700Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import PowerTransformer\n",
    "\n",
    "# 为了模拟数据科学家的实际操作，我们将\n",
    "# 在训练集上训练 PowerTransformer 然后转换测试集\n",
    "# 将第一列中的前十个样本作为测试集\n",
    "# 将第一列中的其余样本作为训练集\n",
    "\n",
    "test_set = X[0:10,0]\n",
    "# 返回 array([8.3252, 8.3014, 7.2574, 5.6431, 3.8462, 4.0368, 3.6591, 3.12, 2.0804, 3.6912])\n",
    "train_set = X[10:,0]\n",
    "\n",
    "model = PowerTransformer(method='box-cox', standardize=True)\n",
    "# 使用 box-cox 变换\n",
    "\n",
    "model.fit(train_set.reshape(-1,1)) # 在训练集上训练\n",
    "# 转换缩放训练集与测试集\n",
    "transformed_train = model.transform(train_set.reshape(-1,1)).reshape(-1) # 转换训练集\n",
    "transformed_test = model.transform(test_set.reshape(-1,1)).reshape(-1) # 转换测试集\n",
    "\n",
    "# 以测试集结果为例：\n",
    "# transformed_test = array([ 1.91669292,  1.91009687,  1.60235867,  1.0363095 ,  0.19831579,\n",
    "# 0.30244247,  0.09143411, -0.24694006, -1.08558469,  0.11011933])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:06.849046Z",
     "start_time": "2020-02-29T21:35:06.219822Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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EYkLFaAiIiIiIiISF31mkoDCwkI3fPhwv2OIiIiIiIgknXnz5lU45/rvbb8+U4AOHz6cuXM7zpQvIiIiIiIiPc3MPjbJX2fUBVdERERERETiQgWoiIiIiIiIxIUKUBEREREREYkLFaAiIiIiIiISFypARUREREREJC5UgIqIiIiIiEhcqAAVERERERGRuFABKiIiIiIiInGhAlRERERERETiQgWoiIiIiIiIxEXI7wAiIiISf7PnrNuv4y6YNrSbk4iISDJRC6iIiIiIiIjEhQpQERERERERiQsVoCIiIiIiIhIXKkBFREREREQkLlSAioiIiIiISFyoABUREREREZG4UAEqIiIiIiIicaF1QEVERBKA1uUUEZFkoBZQERERERERiQsVoCIiIiIiIhIXKkBFREREREQkLlSAioiIiIiISFyoABUREREREZG4UAEqIiIiIiIicaFlWERERJKMc46axha217ewvb6ZqrrmnbebWqOdHpMSDFCQlUJ9cysj+2cyvF8mQwoyCAd1LVtERLpOBaiIiEgfVlnXzLLyaj4or2HZphqWba5h+eYa6psju+yXkRIkPyOF9HAQLLbRffR4Y2uERRt28Pbqyp3bggFjRGEmp44v4uzDBnPwgKw4vCIREenNVICKiIj0ctvrmlmzrY51lfWs3eb9rKusY822erbWNO3cryAzhTFF2ZxXOoRtdc3kZ4TJz0ghLyNMaijYpec6fUIxqyrqWF1Rx+qKWt7bsIO/vLSSP7+4kokluZx9WAmfmTyIwqzUnnq5IiLSi5lzbu979QKlpaVu7ty5fscQERHZL7PnrNvj4845appa2VLdxJaaRrbUNLGluonqxhYq65p32bc4J42h/TIYVpDB6KJsxg7MZkxxNv2zUjGzLj3f7lwwbejHtm2paeTfCzfyyIIyFm+sJhgwjh1VyP87ZQwTSnL363lERKR3MbN5zrnSve3nSwuomd0BHAI84Zy7cQ/7FQFPO+cOi1s4ERGRBNIajbJoww5eW1HBph2NO7enh4MMyE7l1PFFHNQ/i2H9MhnWL4OhBRmkhbvWmtldBmSnccUxI7nimJF8uLmGRxaU8eDcDZx9y+t8+5QxfPGYkQQCtvcTiYhInxf3AtTMZgJB59xRZnanmY1yzi3fze6/BdLjGE9ERCQhNDRHeGdNJW+srKC6sZUB2amcMXEgA3PTGJCdSlZqCDPrtEXST6OLsvneaWP50rEj+f7Di/jFU8t4ZflWfvfZyRTnpvkdT0REfOZHC+gM4IHY7WeB6cDHClAzOwGoA8p3dyIzuxK4EmDo0MT6ABYREdkfVfXNvL6ignfWbqe5NcpB/TOZOWUwowZk7ew+2xvkZaRwy4VTeGDuen707yUc/9uXOGdKCYcM2rcuuYlWYIuIyIHxowDNBMpityuBKR13MLMU4HrgbODR3Z3IOXcbcBt4Y0C7PamIiEgcbdhez12vr6GpNcKkwXlMP7iQQXmJ1RFof8aOfvm4g7h/7jrumbOOqcML+OTEgaSEtHyLiEgy8qMAreWjbrVZQGefQNcAtzjnqnrT1V4REZH9tW5bHXe9sYaMlCD/M+OgPjWLbP/sVL583EE8v2Qzry6vYEt1I5dNH6E1REVEkpAf//PPw+t2C3AosKaTfU4CrjKzl4DJZnZ7fKKJiIjE31urtnHn62vISg3xxWNG9qnis00oEOC0CQOZNXUIayvreWDueqJ9ZCZ+ERHpOj8K0EeBi8zsJuA8YLGZ7TITrnPuWOfcDOfcDGChc+4KH3KKiIj0uFeXb+WSu94mNyPMF48dSV5Git+RetSkwXmcMXEgizdW8+SiTfSV5eBERKRr4t4F1zlXbWYzgJOBXzvnyoF397D/jDhFExERiasXlm3my/fMZ2ShN9FQVuq+fyzv73qefpp+cCE76pt5feU28tLDTB/V3+9IIiISJ74MvnDObXfOPRArPkVERJLO0++X86W75zGmKJv7rjxyv4rP3uz0iQOZMCiHJ98v570NVX7HERGRONHofxERkThbtGEHX509n4kludz7xWl9vtttZwJmfLZ0CMP6ZfDgvA2srqjzO5KIiMSBClAREZE4qm9u5ev3LaB/dip3XXIEOWlhvyP5JhwMcNGRwyjISOHut9awubrR70giItLDVICKiIjE0Y1PLGX1tjp+d96h5GYkb/HZJiMlxCVHDyccCPCPN9fQ2BLxO5KIiPSg5BpwIiIi0sP2NCnQ0k3VzJ6zjmNGFbKmop41Fb1vAqGekJ+ZwoXThnLrK6v4z3sbOffwIX5HEhGRHqIWUBERkTioaWzhofkbGJSbxsnjivyOk3CG9svk+LEDmL+uikVlO/yOIyIiPUQFqIiISA9zzvHQ/A00t0Y5r3QIoaA+fjtz/JgBDM5P59EFZexoaPE7joiI9AB9AoqIiPSwN1dt48PNtZwxcSADctL8jpOwggHjvNIhtEaj/GveeqLO+R1JRES6mQpQERGRHrS5upGn3y9nTFE200YU+B0n4RVmpfKpiYNYubWON1Zu8zuOiIh0MxWgIiIiPaQ1EuX+d9aTGg4yc0oJZuZ3pF6hdHg+44qzeWZxOcvKq/2OIyIi3UgFqIiISA/577ItlFc3cs6UErKTeL3PfWVmnD1lMOnhIN+4b6GWZhER6UNUgIqIiPSA9ZX1vPLhVkqH5TO2OMfvOL1OVmqIc6YMZll5Db955gO/44iISDdRASoiItLNWiJR/jVvAznpYc6YONDvOL3WmOJsLj5qGHe8tpo3VlT4HUdERLqBClAREZFu9vzSzWytbWLmYSWkhYN+x+nVvn/6OEYUZvKdf71HTaOWZhER6e1UgIqIiHSjddvqeG15BVOHFzCqKNvvOL1eekqQ3352Ept2NPCzJ5b6HUdERA6QClAREZFu0tgS4V/zN5CbHub0CcV+x+kzDh9WwJXHHsR976znxWVb/I4jIiIHIOR3ABERkZ4ye866/T72gmlD9/mY3z7zARW1zVz2iRHqetvNvnnyKF5YtpnvPfQez37zWPIyUvyOJCIi+0EtoCIiIt3gnTWV3PH6aqaNKODgAVl+x+lzUkNBbjpvMpV1zdzw78V+xxERkf2kAlREROQANTRH+M6D71KSl85p6nrbYyaU5HL1CaN4bOFGnly0ye84IiKyH1SAioiIHADnHNc/9j5rttXz63MnkRpS19ue9JXjD2LS4Fyue/R9ttY0+R1HRET2kQpQERGRA3DHa6v517wNfO3EURx9UKHfcfq8cDDA7z57KLVNrVz7yCKcc35HEhGRfaACVEREZD+9+MEWfv7kUk6fUMw3Thzld5ykMaoom++cMoZnl2zm/nfW+x1HRET2gQpQERGR/bBiSw1fm72AscU5/O68QwkEzO9ISeWy6SOYfnAhN/x7McvKq/2OIyIiXaQCVEREZB9tr2vm8r/PJTUc5K9fKCUjRauaxVswYPx+1mRy0sN85d751DW1+h1JRES6QAWoiIjIPmiJRLlq9nw2VTVy60WHU5KX7nekpNU/O5X/PX8yayrquO7R9zUeVESkF1ABKiIisg9+8vgS3li5jZ/PnMjhw/L9jpP0jj6okK+fOJpHFpTxwFyNBxURSXTqMyQiItJFd7y2mrvfWsuXjh3JuYcP9jtOUpg9Z91e9+mXlcJB/TO59pH3KdveSHFuGhdMGxqHdCIisq/UAioiIrIX0ajjF08t5af/WcIphxTx3dPG+h1J2gmYcV7pENLDQWa/vY6m1ojfkUREZDdUgIqIiOxBY0uEq/+5gFtfXsXnjxzKLRdOIagZbxNOdlqY86YOYVttE48t3KjxoCIiCUoFqIiIyG5sq23igr++xZPvb+LaM8bx0zMnEArqozNRHdQ/ixPGDWDh+iru7ULXXRERiT+NARUREenEyq21XHrXO2yubuSWC6Zw+sSBfkeSLjh+zADWV9Zzw78XU5KfzvFjBvgdSURE2tFlXBERkQ5WVdQy85Y3qGtq5b4rj1Tx2YsEzPjc1KGMKcrmq/fOZ/HGHX5HEhGRdlSAioiIxDjneG35Vu58bTWFWSk8etUnOGyollrpbVLDQe66dCo56WEu+9s7bKxq8DuSiIjEqAAVEREBGpoj3DtnHU++X87Y4hwe/sonGFKQ4Xcs2U9FOWncdelU6psiXPa3d6hubPE7koiIoAJURESEjVUN/PmlFSwr0hqngAAAIABJREFUr+aMCcVcOG0ouelhv2PJARpbnMNfPn84K7bUctW982mJRP2OJCKS9FSAiohI0nLO8fbqSv7v5ZW0RqJ88ZiRTB/VHzMts9JXTB9VyM9nTuTV5RX84OFFWp5FRMRnmgVXRESSUmskyiMLyliwvopRA7L4bOkQslL1sdgXnVc6hA2V9fzhhRWU5KfzjZNG+x1JRCRp6ZNWRESSTnNrlHvmrGXFllpOHDuA48cOIKBWzz7tmyePpqyqkZufX05WaogrjhnpdyQRkaSkAlRERJJKQ3OEf7y5hnWV9Zw7ZTBThmmW22RgZvzqnIk0tkS48YmlpIYCXHTU8E73nT1n3X49xwXThh5AQhGR5KACVEREkkZtUyt/e301m6ub+NwRQ5lQkut3JImjUDDA72dNpqk1wvWPLSYtHOSzpUP8jiUiklQ0CZGIiCSFHQ0t/PWVVWytbeKio4ap+ExSKaEAf7pgCseMKuR7D73Hv9/d6HckEZGkogJURET6vMq6Zm57ZSXVjS1ccvQIRhdl+x1JfJQWDnLbRaWUDi/gm/cv5On3y/2OJCKSNFSAiohIn1ZR28Str6yksSXK5dNHMKIw0+9IkgDSU4LceclUJpbkcvU/5/PiB1v8jiQikhRUgIqISJ/VNuFQJOr44rEjGZyf4XckSSBZqSH+ftkRjC7K5st3z+Pt1ZV+RxIR6fNUgIqISJ/UEoky++21bK9r4fPThlGck+Z3JElAuelh/nHZEZTkp3P5397h/bIdfkcSEenTVICKiEif9JPHl7Byax1nHVbCcHW7lT3ol5XKPZdPIzstxCV3vU1FbZPfkURE+iwVoCIi0uf8/Y013P3WWo4dVcjhWudTumBQXjp3XzEN5+DO11ezo6HF70giIn2SOef8ztAtSktL3dy5c/2OISIiPnvlw61cctfbnDC2iBlj+hMw8zuS9CJlVQ3c/uoqctPDXHnMSDJSu75k+gXThvZgMhGRxGZm85xzpXvbL2FbQM2swMxONrNCv7OIiEjvsGJLDVfNns/oomxuPn+yik/ZZyV56Vx01DAq65r525traGqJ+B1JRKRP8aUANbM7zOxNM7tuN4/nA/8BjgBeNLP+cQ0oIiK9zva6Zi7/+1xSQwFu/0IpWfvQciXS3sjCLD53xFA2VjVwz5y1tEajfkcSEekz4l6AmtlMIOicOwoYaWajOtltEvAt59zPgGeAKfHMKCIivUsk6rj6nwvYVNXIrReVarkVOWDjBuYwc8pgVm6t48lFm/yOIyLSZ/jRAjoDeCB2+1lgescdnHMvO+feMrNj8VpB3+zsRGZ2pZnNNbO5W7du7am8IiKS4G567gNeW1HBT88ar0mHpNtMGZrPMQcX8taqShas2+53HBGRPsGPAjQTKIvdrgSKOtvJzAyYBWwHOp2Kzjl3m3Ou1DlX2r+/eumKiCSj55Zs5s8vrmRW6RBmTdUkMNK9ThlfzMjCTB5ZUMbGqga/44iI9Hp+FKC1QHrsdtbuMjjPVcB7wGfilE1ERHqRNRV1fOuBhUwsyeXHZ473O470QcGAcf4RQ8lMDXHvnLXUN7f6HUlEpFfzowCdx0fdbg8F1nTcwcy+Z2YXx+7mAVXxiSYiIr1FQ3OEL98zj2DAuOXCKaSFg35Hkj4qKzXEBUcMpbqxlQfmrifaR5awExHxgx8F6KPARWZ2E3AesNjMbuywz22xfV4BgnhjRUVERABwznHto4v4YHMNN8+azJACTTokPWtIQQafmjSQDzfX8t+lW/yOIyLSa8V9jnrnXLWZzQBOBn7tnCsH3u2wz/bY4yIiIh9z75x1PDy/jG+cNIoZYwb4HUeSxBHDC9hQ2cCLH2xhcH464wbm+B1JRKTX8WUdUOfcdufcA7HiU0REpMsWrq/iJ48vYcaY/nzthM5W8hLpGWbGZyYPYlBeGg/OW8+22ia/I4mI9Dq+FKAiIiL7Y3N1I1++ex4DclK5edZkAgHzO5IkmXAwwIXThgHw0PwyjQcVEdlHKkBFRKRXaGiO8MV/zKW6sYW/XlxKXkaK35EkSeVnpHDGhIGs2VbH26sr/Y4jItKrqAAVEZGEF406vv3guywq28H/nn+Yxt6J7w4fls/BA7J4enE5VfXNfscREek1VICKiEjCu/m/y3li0SauOW0sJx9S5HccEcyMsyeXgINHF5bh1BVXRKRL4j4LroiIyL54bGEZf/jvcg4fmk9WaojZc9b5HUkEgPzMFE4ZX8R/3tvEgvVVXHjkML8jiYgkPLWAiohIwlqwbjvf+dd7DO+XwZmHDcJMkw5JYjlyZD+GFWTwxHub2FLT6HccEZGEpwJUREQS0saqBr74j3kU5aRy4bRhhAL6yJLEEzBj5pTBtESi3PDYYr/jiIgkPH2ai4hIwqlubOHyv8+lqSXCnV+YSmaqRoxI4uqfncqJYwfw1PvlPLVok99xREQSmgpQERFJKI0tEa74+1yWb67hTxdOYVRRtt+RRPZq+qj+TCjJ4frHFmtWXBGRPVABKiIiCaM1EuWrs+fzzppKbpo1meNG9/c7kkiXBAPGr885lKr6Zn7x5DK/44iIJCwVoCIikhCiUcd3H3qP55du4SdnTuAzhw7yO5LIPjlkUA6XTR/BA/PWs2jDDr/jiIgkJBWgIiLiO+ccNz6xlIfnl/Gtk0dzkZazkF7qqyccTL/MFH78+GKtDSoi0gkVoCIi4rs/vbCCO19fzaWfGM7VJxzsdxyR/ZaTFuY7p45h7trtPP6eJiQSEelIBaiIiPjq7rfW8rvnPmTmYSVc/8lDtNan9HrnHj6ECSU5/OLJpTQ0R/yOIyKSUFSAioiIb554bxM/fOx9Tho3gF+dO4lAQMWn9H7BgHHDp8ezaUcj//fySr/jiIgkFBWgIiLiizdWVvDN+xdSOiyfP10whXBQH0nSd0wdXsCnDx3E/728krKqBr/jiIgkDH3ai4hI3C3euIMr/zGP4YUZ3H7xVNLCQb8jiXS7a04fixn84smlfkcREUkYIb8DiIhI8pg9Zx2Vdc3c+vJKggHj7MMG88QiTdQifVNJXjpfPu4gbn5+ORcfVckRIwr8jiQi4jsVoCIiEje1Ta3c9fpqWqOOK6ePIDc97HckkW4ze866j23LS08hNz3MN+5bwFeOP5hAJ5NsXTBtaDziiYgkBHXBFRGRuKhrauUfb65hR0MLFx81jKKcNL8jifS4lFCA0ycUs3FHI/PWbvc7joiI71SAiohIj2uJRLlq9nzKtjdw/tShDOuX6XckkbiZWJLLsH4ZPLu4nMYWLcsiIslNBaiIiPS4n/5nCS99sJWzJpdwyKAcv+OIxJWZ8alJg6hvjvDCsi1+xxER8ZXGgIqIyD7rbKzb7ixcv50H5m5g+sGFTNUkLJKkSvLSOXxYPm+srGDq8AL6Z6f6HUlExBdqARURkR5TXt3IIwvKGN4vg1PHF/sdR8RXp4wvJhwM8KRmfhaRJKYCVEREekRjS4TZc9aSGgpy/hFDCQY+PvunSDLJSg1x4tgBfLC5hg/Kq/2OIyLii24rQM0saGbnddf5RESk93LO8dD8DVTWNfO5I4aSk6blVkQAjjyoH4VZKTyxqJzWaNTvOCIicbfPBaiZPWRmo81sVuz+eDP7PWDAVd0dUEREep/XV1SweGM1p44vZkShZrwVaRMKBPjkxIFU1Dbx1qpKv+OIiMTd/rSA9sebvOh6MzsK+AvwT+dcK6BLeSIiSW51RR1PLy5n/KAcph9c6HcckYQzpjiH0UVZvLBsM7VNrX7HERGJq/0pQFudc0uAs4Am4BrgXDPTeFIRkSRX09jCfW+vIz8jhXOmDMZM4z5FOnPGxIE0t0Z5bslmv6OIiMTVfhWNZpYG/BRYCvweGILXBdd1XzQREelNnHM8OG8Dja0RLjxyGGnhoN+RRBLWgOw0jhrZj7lrKlm8cYffcURE4mafClAzuxAYA0SAN4D78VpCC4AvASVm9hUz+3p3BxURkcQ2d+12Vmyp5fQJAynOSfM7jkjCO2FsEekpQX78+BKc0zV8EUkO+9oCehDQADwHzAMGAD8EcoCBQGrs98BuzCgiIgmuqr6ZJxdtYmRhJkeMKPA7jkivkJ4S5NRDinl7dSWPLCjzO46ISFzsUwHqnPsJsB74InAtkAK8BWQ4564HVjvnrnfOXdPtSUVEJCE553hkQRnOwcwpgwlo3KdIlx0+PJ8pQ/P42RNLqapv9juOiEiP258xoM45txz4KnAz3jjQ33RrKhER6TXmrd3O8i21nDqhmILMFL/jiPQqATN+dvZEqhpa+OVTy/yOIyLS4/anAA2Y2QDgIbzicxZe11vQJEQiIkllR0MLTyzaxIjCTKap663Ifhk3MIcrpo/gvnfW884arQ0qIn3b/hSgK4AM4Cbn3DvAj4CvmlkeoFknRESShHOORxeUEXWOmYeVqOutyAH4+kmjKMlL59pHFtHcqmXVRaTv2tdZcA34i3NuDXAvgHOuBpgCVAO/jO13sdYFFRHp2xasq+KDzTWcOr6Yflmpez9ARHYrIyXET84cz4eba7n9tVV+xxER6TH7WiQG8cZ9ArxhZkvNbAmwGFgCTDGz/8HrlqsF4ERE+qgdDS38Z9FGhvfL4MiR/fyOI9InnDiuiFPHF/GH/y5nfWW933FERHrEvs6C24q3BihAuXNuHHAecLRzbizwU+B0YJZzrqVbk4qISEJwzvHYwjIiUadZb0W62Y8+M56gGdc/9r7WBhWRPml/uslOMbN/AYPNLB2vK+6LZrYReAa40TlX250hRUQkcTyzeDPLyms4aVwRhep6K9KtBuam861TxvDSB1t5clG533FERLrd/hSgC4HvAo3AMbHb1wCXAv8H/NnMjuu2hCIikjDqmlr58eOLGZibxtEHFfodR6RP+sJRwxg/KIcfP76Y6kZ1KBORvmVfJyEKA0Hn3CrgCeAM4DTgVOBTQANwDvBXM8vq5qwiIuKzm5//kE07Gjnz0EEEA+p6K9ITQsEAv5g5kYraJn7y+BK/44iIdKt9HQPaAlxgZr90zv0SmAR8GzgceNk594Rzbh3wY3XDFRHpW5ZsrObO19fwuSOGMrRfpt9xRPq0SYPzuOr4g/nXvA08s1hdcUWk79jXFtAQsB44OrYpFTDgauAcM7vbzFKdc/d2b0wREfFTNOq47tFF5KWH+d5pY/yOI5IUrj5hFOMH5fCDhxdRUdvkdxwRkW6xr2NAV+Att9I/tvxKIfAUcD8wGTgS+Gu3JhQREd/dP3c989dV8YMzxpGXkeJ3HJGkkBIK8PtZk6lpauX7Dy/SrLgi0ifsaxfc4XhjPC+N/VQBVwLXOOfGOedGAQPN7JzuDioiIv6oqG3il08tY9qIAmZOKfE7jkhSGV2UzXdOGcNzSzbz0Pwyv+OIiByw0H4ccwYwEYgCuXhdcM8ysx865w4Hrgd+CTzUbSlFRMQ3v3hyGfXNrfzs7AmY1vwUibvLpo/guaWb+fG/F3PkyAIG52cAMHvOuv063wXThnZnPBGRfbLPy7A4537jnLvYOXcJcLVzbpVz7lLg+NjjbwFXdW9MERHxw1urtvHQ/A188ZiRHDwg2+84IkkpGDB+99lDiTrHdx58j2hUXXFFpPfan3VAd3LOPdfudnW724v3dJyZ3WFmb5rZdbt5PNfMnjKzZ83sETPTgCMRkThrbo1y3aPvMzg/natPGOV3HJGkNqQggx9++hDeXLWNu95Y43ccEZH9dkAF6P4ws5l4a4keBYw0s86+1VwI3OScOwUox1trVERE4ujWl1eyYkstPzlzPOkpQb/jiCS980qHcNK4Afzq6WUs31zjdxwRkf0S9wIUmAE8ELv9LDC94w7OuVvata72B7Z0diIzu9LM5prZ3K1bt/ZEVhGRpLRyay1/fGEFn5w0kBPGFvkdR0QAM+MXMyeRlRri6/ctpDUS9TuSiMg+86MAzQTapnGrBHb7zcbMjgLyY+NKP8Y5d5tzrtQ5V9q/f//uTyoikoScc1z7yCJSwwFu+PQhfscRkXb6Z6fym3MnsWRTNc8sLvc7jojIPtufWXAPVC2QHrudxW6KYDMrAP6It+yLiIj0gM5m0Zy3tpK3VlVy9uQSnl/SaQcUEfHRieOK+MJRw/j7m2sZVZTN6CJNECYivYcfLaDz+Kjb7aHAmo47xCYdehD4vnNubfyiiYgkt9qmVp5cVM7wfhkcPjzf7zgishvfP2McRTmpPDhvAzWNLX7HERHpMj8K0EeBi8zsJuA8YLGZ3dhhn8uBKcC1ZvaSmc2Kd0gRkWT0xHsbaY5EOWtyCQGt+SmSsNLCQWZNHUpTS4SH5m8g6rQ0i4j0DnEvQGPLtcwA3gKOd86965y7rsM+f3HO5TvnZsR+7o93ThGRZPPh5hre3bCD40b3Z0BOmt9xRGQvinPSOGPiQD7cXMubK7f5HUdEpEv8aAHFObfdOfeAc06j50VEEkBza5THFpZRmJXKjNGa1E2kt5g2ooBxxdk8vbicjVUNfscREdkrXwpQERFJLP9dtpnt9S2cfVgJoaA+GkR6CzNj5pTBZKYEuf+d9TS3amkWEUls+pYhIpLkyrY38PqKCqYOz2dEYabfcURkH2Wmhjj38CFU1Dbx5KJNfscREdkjP5ZhERGRBNHcGuX+uevISg1x2viBfscRSUqdLYe0rw4ekMX0UYW8uryCsQOzGVuc0w3JRES6n1pARUSS2H/e28i22mbOKx1CekrQ7zgicgBOHldEcU4aD88vo66p1e84IiKdUgEqIpKknlq0iblrt3Ps6P6M7J/ldxwROUChYIDPlg6moSXCowvLcFqaRUQSkApQEZEktLGqgWseXsTg/HROGlfkdxwR6SYDc9M5eVwRizdWs2B9ld9xREQ+RgWoiEiSiUQd33pgIS2RKLNKhxAMmN+RRKQbTR9VyPB+mTz+7ka21zf7HUdEZBcqQEVEksytr6zkrVWV/Pgz4+mXlep3HBHpZgEzPnv4YAD+NW8DUXXFFZEEogJURCSJvLu+ipue/ZBPThrIubEvqCLS9+RnpvCpSYNYXVHH6ysq/I4jIrKTClARkSRR29TK1+9bwIDsVH5+1kTM1PVWpC+bMjSPQwbm8OySzZTvaPQ7jogIoAJURCQpRKKObz/wLusq67n5/MPIzQj7HUlEepiZcdZhJaSFgzw4bz2RqLriioj/VICKiCSBnz2xlKcXl/ODM8ZxxIgCv+OISJxkpYY4e3IJm3Y08sryrX7HERFRASoi0tfd8dpq7nx9NZd+YjhXHDPS7zgiEmeHDMphYkkuLyzbwpZqdcUVEX+pABUR6cOeWrSJG59Ywmnji7nuk4f4HUdEfPLpQweREgzw8IIydcUVEV+pABUR6aPmra3kG/cv5LAhedx8/mSt9ymSxLJSQ3xq0kDWVdZz95tr/I4jIklMBaiISB+0amstV/x9LoPy0rn9C1NJCwf9jiQiPps8JI/RRVn8+pkPWF9Z73ccEUlSKkBFRPqYitomLrnrHQJm/O3SqRRkpvgdSUQSgJlx5uQSDPjBI4twTl1xRST+VICKiPQhFbVNXHzH22ypaeT2L5QyrF+m35FEJIHkZ6TwvdPH8uryCh6aX+Z3HBFJQipARUT6iLKqBs77vzdZVVHLrReVctjQfL8jiUgC+vy0YZQOy+en/1nClhrNiisi8aUCVESkD1ixpZZz//IGW2ubuOfyaRw3ur/fkUQkQQUCxq/OnURDS4QbHlvsdxwRSTIqQEVEerlFG3Zw3q1v0hKJcv+VR1E6vMDvSCKS4A7qn8XXTxzFU++X8//bu+/4OOo7/+Ov73ZpV73LttyNscE2rhgwGBJCQiAQIEevB6SR5C53ufKAu0v73V1y5C6BJIQWIIQaEnpCC8Wm2MbdxuCCLRdZtiWrt9Vq9/v7Y1ayKAbZljQr7fv5eOgxs6vZ3c9qVrPznu93vvP8O3vcLkdE0ojP7QJEROSAB5fuOKTlt9a2cP9b2ymMBPn9tfMYW6hzPkWkb64/eRxPr9nNfzz5DieMLyAr5He7JBFJA2oBFREZot6rbuLeNyrJzvDz2NfnK3yKyCHxez3813nHsre5g5uf3+h2OSKSJtQCKiIyBC3bVsdTa6ooy8ngqhPG8Mp7NW6XJCJD0HEVeVw5fwz3vVXJOceNYKYGLxORAaYWUBGRISRhLc+/s4cnVlcxoTjCtSeNJRzUsUQROXz/eMZRlGaH+Nc/riMWT7hdjogMcwqgIiJDRFc8waPLd/LaphrmjMnn8uPHEPR73S5LRIa4SNDHD885ho17m7lz8Va3yxGRYU4BVERkCGjr7OK3b1SydlcjZ0wp4dwZ5Xg9xu2yRGSYOH1KCZ+fWsovXtpMZW2r2+WIyDCmACoikuLqWjv5zWtb2VnfxoWzR3HKUcUYo/ApIv3r+1+aSsDr4cYn1mGtdbscERmmdOKQiEgKq25s57dvVJJIWK45caxGuhWRI/ZJl3s6dXIxT63ZzfceW/uRAYkumVcx0KWJSBpQC6iISIraVd/GXYu34fMYvnrKOIVPERlwc8fmU5GfyZ/XVdMS7XK7HBEZhhRARURS0Pb9rdz9+jZCfg/XLRhHcVbI7ZJEJA14jOHLx40gGkvwzNrdbpcjIsOQAqiISIrZWtvCPW9UEgn6uG7BOPLDAbdLEpE0UpId4tTJxazd1cj6qka3yxGRYUYBVEQkhWze18x9b1aSk+nnupPHkZup8Ckig++USUWU54Z4cs1uWtUVV0T6kQKoiEiKePm9vdz/1nYKwkGuWzCO7JDf7ZJEJE15PYYLZo6iozPO0+qKKyL9SAFURCQFvPLePr56/wpKskNce9JYIkENUi4i7irNUVdcEel/CqAiIi5bvbOBbzywkqNKs7jmxLFkKnyKSIro3RW3rrXT7XJEZBhQABURcVFlbSvX3Ps2hVkBfnvVHDICXrdLEhHp0bsr7r8/ud7tckRkGFAAFRFxSW1LlCvvWYa1lvuunqtLrYhISuruivvM2mr+sq7a7XJEZIhTABURcUFrtItr7n2bvU0d3H3VHMYVRdwuSUTkoE6ZVMQxI7L5tyfXqyuuiBwRBVARkUHWFU9ww4MrWV/VyK0Xz2RmRZ7bJYmIfCKvx3DzV6bT2B7jnx5bQyJh3S5JRIYoBVARkUFkreXGx9fzysYafnTuMZw+pcTtkkRE+mRyaTY3nnk0L727j98set/tckRkiFIAFREZRLe+vIVHlu/k26dN4NJ5o90uR0TkkFx5whjOnl7Ozc9v5M0ttW6XIyJDkMb6FxEZAA8u3fGR+9ZVNfLQsh0cNyqXkuzQxy4jIpLKjDH893nH8m51E996aBXPfnsBpTkaQE1E+k4toCIig2B3QzuPrdhJRX4m5x43AmOM2yWJiByWcNDHby6bRUcszjceWEFnV8LtkkRkCFEAFREZYM0dMe5fsp3MgI9L51Xg92rTKyJD24TiCD+5YBordzTwX3951+1yRGQI0V6QiMgAisUT/H7Jdto6u7j8+NFkhfxulyQi0i/OmlbONSeO5Z43Knl6zW63yxGRIUIBVERkgFhreWJVFTvr27lg1ijKczPcLklEpF/965mTmT06j3/+41q27Gt2uxwRGQIUQEVEBsjrW2pZtbOBzxxdzLEjctwuR0Sk3/m9Hn55yUwyA16uuXc5exo73C5JRFKcKwHUGHO3MeYtY8xNn7BMiTFm8WDWJSLSX97b08Rz6/dw7IgcTjuq2O1yREQGTGlOiLuunENdayeX3LmEfU0KoSJycIMeQI0x5wFea+18YJwxZuLHLJMH3AeEB7s+EZEj9W51Ew+/vZOy3BDnzxypEW9FZNibMSqX+66Zw56mDi65ayk1zVG3SxKRFOVGC+hC4NHk/AvASR+zTBy4EGgapJpERPrFvqYO/vbetwn5PFx+/BgCPp3pICLpYdbofO65ag5V9e1cdtdS6lo73S5JRFKQG3tGYaAqOV8HlHx4AWttk7W28dOeyBhzvTFmuTFmeU1NTT+XKSJyaNo741z7u+XUt8W4Yv4YcjI04q2IpJd54wq4+8rZVO5v5bK7ltLQphAqIh/kRgBtAbqHgowcSQ3W2justbOttbOLior6pTgRkcORSFj+/pHVrKtq5JaLj9OItyKStk6YUMidV8xmS00Ll9+9jMb2mNsliUgKcSOAruBAt9vpQKULNYiI9KufPP8ez72zh5u+OIXTp3ykY4eISFo5eVIRt182i/f2NHH53Us1Oq6I9PC58JpPAIuNMeXAF4CLjDE/ttYedERcEZFU9vCyHdz+2lYuO76Ca04c43Y5IiID4sGlOw75MRfPqeCPK3dx1q2LueWi4zhhQuEAVCYiQ8mgt4Baa5twBiJaApxqrV1zsPBprV04iKWJiByyN7bUctMT61kwsZDvnz1VI96KiPQyuSybJ284kdzMAJfdvZRfv7qFRMK6XZaIuMiV4RmttfXW2kettXvceH0Rkf6wvqqRr/1+BeOKwvzq0pn4vBrxVkTkwyYUZ/HkN0/ki9PK+elzG7n+/hU6L1QkjWlvSUTkMGzZ18wVv11GVtDHPVfPJTukEW9FRA4mHPRxy0Uz+P7ZU3h14z7OvvV13tn9qRc8EJFhSAFUROQQbd/fyiV3LsVjDA9cdzwjNOKtiMinMsZw1YljeeSr8+nsSvDlX7/Jr17ZQmdXwu3SRGQQKYCKiByC6sZ2LrlzKZ3xBA9cO4+xhWG3SxIRGVJmjc7jmW+fxGlHFfM/z2/kzFsWs2TrfrfLEpFB4sYouCIiQ1JNc5RL71xKY3uMB6+bx1GlWW6XJCKS8g42eu7Jk4oozg7y9JrdXHTHEmZW5PL5Y8qIBJ3d00vmVQxmmSIySBRARUQ+QfeOU1tnF3ct3sb+1ihXnzCW9VVNrK9qcrk6EZGhbXJpNuMKI7yycR+vb67l3epmPn9MKbMibJYvAAAaI0lEQVRG57ldmogMEAVQEZFP0RGLc++bldS0RLli/mjGqNutiEi/Cfg8nDG1lBmjcnly9W4eX1XFiu31zB6Tx+TSbLfLE5F+pnNARUQ+QVNHjDsXb2V3QzsXz6lgYrG63YqIDISS7BDXLRjLBTNHUtsS5Yu3vM5//vldWqNdbpcmIv1ILaAiIgexrbaV2197n9ZonCvnj2FiicKniMhAMsYwc3Qek0uz2FLTwh2LtvLMmt18/0tT+dzUUrfLE5F+oAAqIvIx1u5q4Op73ibaleDaBWMZmZfpdkkiImkjM+hj2shccjL8PLG6iuvvX8HRpVmcPb2c3MzApz5eAxiJpC51wRUR+ZDFm2u46I4lZAS8fO3k8QqfIiIuGV0Q5oZTJ/L5qaVsqWnhF3/dzNuVdVhr3S5NRA6TAqiISC9Prq7imnvfZnRBmD99/QQKs4JulyQikta8HsPJk4r4zmcmMSI3g8dXVXHfW5U0tsfcLk1EDoMCqIgIkEhYfvXKFr7z8Gpmjc7jka8eT3F2yO2yREQkKT8c4JqTxnL2tDK21bbyi79uYuX2erWGigwxOgdURNJeY1uM7z66mr++t49zZpTzk/OnEfJ73S5LREQ+xGMM88cXMqkki8dW7uKxlbtYv7uRc2eMIDvD73Z5ItIHagEVkbS2vqqRs365mEWba/jhOVP5+YUzFD5FRFJcQSTIdQvG8cVjy9iyr4VbXt7Mpr3NbpclIn2gACoiaeuRt3dw3m1v0hW3PPrV+VwxfwzGGLfLEhGRPvAYw4kTCrnhtAlkh/zc+2YlL2zYQzyhLrkiqUxdcEUk7XTE4vzbE+v5w4pdLJhYyM8vnEFBRIMNiYgMRcVZIb52ynieWbubVzfWsH1/G2dMLdF5/CIpSi2gIpJWVmyv56xbX+cPK3bx7c9M5N6r5yp8iogMcQGfh/NmjuSCWSPZVd/Gmbcs5s0ttW6XJSIfQwFURNJCa7SLHzz9Dhf85k3aol387pq5fPf0SXg96nIrIjJczKzI4xsLJ5CbGeDSu5fyi5c2k1CXXJGUoi64IjLs/eDpd3hiVRX1bTGOH5fPGVNK2VXfzoNLd7hdmoiI9LOS7BBP3XAiNz2+nv97aRNrdjXwfxfOIEej5IqkBLWAisiw1dgW43t/WMM9b1Ti9RiuWzCOL00fQVCj3IqIDGuZAR8/+5vp/OjcY1i8uYZzfvk6G/dolFyRVKAWUBEZdqJdcR5cuoNfvryFhvYYp0wq4rTJxfi9OuYmIpIujDFcfvxoppRl8bXfr+TLv36Dn14wjbOmlbtdmkhaUwAVkWEjkbA8tWY3P3txIzvr2pk/roAbv3g0a3c1ul2aiIi4ZNbofJ791kl8/YGV3PDgKtbtauR7ZxyFTwclRVyhACoiQ561ltc21fCT5zbybnUTU8qyue+aYzl5YiHGGAVQEZE0V5wd4qHrjudHz2zg9kVbWb+7kVsuOk6joIu4QAFURIYsay2LNtdy26tbWLK1jlH5GfziohmcPa0cj0a3FRFJWwcbZO7osmzOnzmSJ1dXcerNr3LhnArGFoZ7fn/JvIrBKlEkbSmAisiQ09mV4Kk1u7lr8Vbe29NMcVaQH3xpKhfPrSDgU5cqERE5uFmj8yjPDfHg0h3ctXgrn51SwimTivAYHbgUGQwKoCIyZDS2xXhg2Xbue7OSvU1RjirJ4uavTOfs6WUEfRrZVkRE+qYsJ4MbTp3A46ureHHDXiprW/nK7FFulyWSFhRARWTQHer1N3c3tLNsWx3rdzfS1hlnwcRCfnrB9J5zPEVERA5V0O/lwtmjGF8Y4em1u7n15c1MG5nD8eMK3C5NZFhTABWRlNTZlWBdVQNLt9Wxq74dn8cwbWQuJ04ooCwng6r6dh5attPtMkVEZAgzxjBnbD4j8zN4aNkOLrlzCdefPJ7vfGYiGQH1rBEZCAqgIpJS9jZ1sGxbHat21tMRS1CUFeSsaWUcNypPOwMiIjIgynIy+ObCCWyobuI3r73PM2t386NzjuHUycVulyYy7CiAiojrYvEE7+xuZOm2Orbvb8PrMRxTns3csQWMKchUN1sRERlwQb+X//nKdM6fNZIbH1/H1fe+zZnHlvLvZ02lNCfkdnkiw4YCqIi4prY5yrLKOlbuqKetM05BOMAXjillZkUe4aA2TyIiMviOH1fAn7+zgDsXbeXWl7ewaFMt//C5SVwxfwxeXeJL5IhpD09EBpVzbmcjS7ftZ2tNKx4DU8qc1s5xRWENgy8iIq4L+rzccNpEzp5ezk1PrOcHT2/g/iXbuXL+GM6fNZKIDpKKHDZjrXW7hn4xe/Zsu3z5crfLEJGD2FnXxkPLdvDo8p3UtnSSm+ln7ph8Zo3OIyvkd7s8ERERLplX8ZH7rLX8Zf0ebn/tfdbsaiQS9HHBrJFcMX8044oiR/R6hzoq/CfVKeI2Y8wKa+3sT1tOh29EZMB0diV4ZeM+Hly6g0WbazDAaZNLGJGbwcSSiFo7RUQk5RljOPPYMs48toxVO+q5781KHli6nXvfrOSUSUVcOGcUs8fkUZyl80RF+kIBVET6lbWW9VVN/HHlLp5as5u61k5KsoN8+7SJXDhnFOW5GYd9xFdERGQg9eX7ae7YAo4uy2ZZZR3LttXx2qYaAEbkZjBjVK7zU5HLMeU5Gr1d5GMogIpIv9jX1MHjq6r448pdbNrbQsDr4fQpJZw/awQnTyzC5/W4XaKIiEi/yAr5+czkEhZOKmZXfRtFWUFW7Wxg9Y4Gnl1X3bNcwOchEvQRDnoJB3yEgz4yk6E0nrBUN3aQSFgS1pKw4DHg83rwew0+T3Lq9RAOeCmMBCmIBCmMBLDWaoR4GbIUQEXksG2rbeXFDXt4ccNelm+vx1o4riKXH597DGdPKycnU+d2iojI8OX1GEYXhD9wTmZNc5TVOxvYuKeJ5mgXrdEuWqNxWpLzTR1dGMDnMVgLXq8hYDwYAwkLXfEErdEEXYkYXXFLLJ6gtTNOPHFg3JZbX97C2MIwE0sizB9XwIkTCinPzXDhLyBy6BRARaTP4gnL2l0NvLhhLy9u2MvmfS0AHF2WzbdOm8g5M8oZf4QDMoiIiAxlRVlBTp9SwulTSj512b6ekpKwloa2GLUt0eRPJ/tbojy/fg9/WlkFQGEkwPiiCOOLIowrCpMZ+OhuvgYvklSgACoiB+VcMqWBpdvqeHtbHcu319Pc0YXXY5g3Np9L5lXw2aNLGJWf6XapIiIiw5bHGPLDAfLDASaVZPXcn7CWvU0dvF/Tyvv7Wli10/nONsDogjBTyrOZWpZNXjjgXvEiH6IAKiKA0+Vna20r71Y3saG6iTU7G1i1o4FoVwKACcURzppWzvHj8jllUhG5mQEeXLqDxZtrXa5cREQkPXmMoSwng7KcDE6aUEg8YdlV38amvS28W93En9dV8+d11ZTlhJhSls1xFblMLs3S+aPiKl0HVCTNxOIJdta1sa22lW21rWzc08wb79eyrylKV/L8Eq8xlOaEGFOQyZjCMKMLwrrotoiIyBCzvyXKhuSB5R3727BARX4mn5tSwuemljJrdB5ez/AKo7q2qnt0HVCRNNS90U1YS1N7jNqWTmpbouxPni9S2xKlvq2TXuMYEA76KMsJMX9chNKcEGU5GRRlBYfdF5KIiEi6KYgEWTCxiAUTi2juiJGd4eeFd/bwu7e2c9fr2ygIB/js0SWccUwJJ4wvJOTXZWNk4CmAigxR1lr2t3b2tGRuq21l0aaaZODs7GnNBPB7DYWRIGW5GRw7MofCSJDCcIDCSJBMtWyKiIgMe1khPxfPreDiuRU0d8R4bVMNz7+zl2fXVfPI8p0EvB6mj8ph7th85o0tYNboPMLaR5ABoE+VSAqz1lLb0sn2/a1U7m9jR3Jaud8JnM0dXT3L+jyG3MwAhZEAE4uzKIg4AbMwEiQ75NP5HiIiIgI4YfSsaeWcNa2caFect97fz1vv72fJtjp+89pWfvXK+3g9hmNG5DCzIpejSrKYWJLFxJII2SFdYk2OjAKoiMsSCcuepg4q97eyY38blfvbWLy5hrrWTva3dtKZHAQIwAC5mX4KwkGmlGX3BMzCSIDczIC6zYqIiMghCfq8LDyqmIVHFQPQGu1i5Y56lm6tY+m2/Ty8bCftsXjP8qXZISaWRJhQHKE8JyN5+k6I0pwQxVkhAj6PW29FhggNQiQygBIJp5tsdWM71Y0dVDe0U93UwZ7GDqobOqhuamdvY5TO+IGQ6fcacjICFIQD5EecqfMTJDfsx+fRhl1EREQGR8JaTplUxKa9zWza28Lmvc1s3tfC+zUttHXGP7J8YSS5z5LpJy8zQF44QF5yPifDTyTkIyvkIyvkJxL0kR3ykRn0EfJ58Hn7vo9jraWtM05zRxfNHTGaOrpoiXbxl3XVRGMJOrridMTidMQSRLvidCUs1jqPs9Az7/V6iAS9zB9XSGGWU3thJEBJdogRuRl4dHC/z/o6CJECqMghSiQsTR0x9rd2Oq2ULc60vs2Zr22JOgGzqZ3dDR3EEx/8H/MaQ3aGj5yMADkZPnIy/OQlA2ZBOEBOph+PusuKiIhICrPWEu1K0Ngeo7E9RlP3tCNGazROW2ects6unmmiD5HDY8Dn8RAJ+Qj6PPi9HuIJS8I6P/GE87qxeILWzvhH9rE+zABBv4eQz4vPazAYjMH5Sc7H4pbWaNcHWnm7hfweJhRHmFTsdEGeVBJhUkkWI/MydGrTx9AouHLI0nXY6q54gvq2WLLLa5S6DwXL7vvrW53QWd/WedANXmbAS0EkQFl2BjMr8hhb0ElOhj/5EyA7w0c46FPAFBERkSHNGEPI7yXk91KSHfrEZbvDanvsg62SHbEEHbE4sXiCWNzSFU/QlbCMLQzTEXNaLY1xDt57PQZjDF6PczuSbEXN6jXNDvlYtKmWkN9L0Och4PP0eZ/rglkjqWt1GhJqW6JUN3aweW8Lm/c5l6v706qqnmWzgj6OLs9mSlk2U8uzmVKezcTiLHU/7iMF0DTS/c/fnOyi0NLRRXM0Rkvy9pKt+4l2JUhY63RPsJCwYHHmPcbg8xp8Hmcj4PN4kgPf+AkHfUSCXsJBH+GAj0jQCVqD+Y+YSFiao109R+Aa2mI9R+Ua22M0tHfS1B77ULDspLE9dtDnzMnwUxAOEE9YwkEfYwszmRrITr7P5PvtNe8/hK4jIiIiIumgd1gdCC0dzn5tNXxqGD6YgM9DafJc1o/T2B5jy75mNu5pYUN1Ixt2N/HI2wfOj/V7DWMKwowrCjO+KMK4ogjji8KMK4qQk6GBm3pzJYAaY+4GpgDPWmt/fLjLDAcHgp4l0TO1PX3XD/Rhd44QRbsSySNHznw0eRSprTNOSzRGS7TrAwGz9+3WaNcHLs3RV91d3w/20MdW7jroYwNeD+FkMI0kf7r7+QeTR6e6j1B1H6WyydDr/IHAAp1dHzxS1n30rLWz6wNdPz7p7Xk9hgy/16kn4ATHoqzgR0Jk93xmwKdBfURERESEnAw/s0bnM2t0fs998YSlcn8rG3Y3saG6iS37Wti8r4W/vrvvA/vc2SEfxdkhiiJBirODPdP8cJBI0NnnDHdPAz4yAl78XoPP6zT2dDf+DJduv4MeQI0x5wFea+18Y8xvjTETrbWbD3WZoeK63y3nzS21PeGyO1z1vt1fMgNeJ+SFDoS9inCm00Wh534/kaC317xzIngk6OOFDXsJeD14PE5rp4EPfNCttcStJR63xBKWeMLpKnH61BJao120ROPOtFfgbel0pq3ReM99jW2d7OtKJEOlEyyjMWe+h3H67YPTT9/v9SSPnHmIxhL4vR58XkPQ5yEnw09pdojMgJcMv5eMgJcMvy859fZM/d7h848rIiIiIu7yegzjiyKML4pw9vTynvtj8QQ769p4v6aVrTUt7G5oZ19zlJrmKKt2NLCvuYOOWOITnvnj+b2Gn5w/jfNmjuzPtzHo3GgBXQg8mpx/ATgJ+HC47MsyGGOuB65P3mwxxmzs51pTXSFQ63YR0kPrI3VoXaQOrYvUoXWROrQuUovWR+pwbV1c6saLHobz/3PQXupw1sXovizkRgANA91n8dYBMw9zGay1dwB39HeBQ4UxZnlfRpqSwaH1kTq0LlKH1kXq0LpIHVoXqUXrI3VoXaSOgVwXboyY0gJkJOcjB6mhL8uIiIiIiIjIEOJGsFuB06UWYDpQeZjLiIiIiIiIyBDiRhfcJ4DFxphy4AvARcaYH1trb/qEZY53oc6hIG27H6corY/UoXWROrQuUofWRerQukgtWh+pQ+sidQzYujC2P4dh7euLGpMHnA4sstbuOdxlREREREREZOhwJYCKiIiIiIhI+tHgPiIiIiIi4ipjTL4x5nRjTKHbtcjAUgvoEGCMeYmDn6+7y1p72WDWk876si6MMfnALGCVtVbXFRsg+r9ILVofqc0YczcwBXjWWvtjt+tJd8aYEuAxa+0Ct2tJZ8aYHOBhwAu0AhdaazvdrSo9JU+9ezb5cxFwmrW2xt2q0ltyO/Wctfa4/n5uNwYhkkP339balz7uF8aYc3vND9gHRXp84rpIbkCfwdmA/q8xRhvQgfNp60I7FoPrU7dT2ul2hzHmPMBrrZ1vjPmtMWaitXaz23Wlq+T3xH041zwXd10K/K+19kVjzG3A54GnXK4pXU0DvmutXZL8H5kJPO9yTenuZg5cFrNfqQvu8DJgHxTps+4N6P/D2XDOdLmedNa9Y/E5YA/OjoW4RDvdrloIPJqcf4EDlzkTd8SBC4EmtwtJd9baX1trX0zeLAL2uVlPOrPWvpYMnycDc4G33K4pnRljTsM5eD8gA8EqgA4TA/1Bkb7RBjR1aMci5Win2z1hoCo5XweUuFhL2rPWNllrG92uQw4wxswH8qy1S9yuJZ0ZYwzO90Q9EHO5nLRljAkA/wb8y0C9hgLoMDAYHxTpO21AU4t2LFKDdrpd1cKB3jER9N0v0iM5bsOtwDVu15LurOObwFrgS27Xk8b+Bfi1tbZhoF5AX0LDw4B/UKTvtAFNHdqxEAFgBQe63U4HKt0rRSR1JA/g/wH4V2vtdrfrSWfGmH82xlyRvJkLaJ/WPZ8FvmmMeRWYYYy5q79fQAF0eBjwD4r0jTagqUM7FiI9ngAuN8b8L/A3OIOkiQj8Lc5YDTcaY141xlzodkFp7A6c7dQinMEDX3C5nrRlrT3ZWrvQWrsQWG2tvba/X0Oj4A4D1tqTu+eNMa8OxAdF+uwO4FFjzLXAerQBdVPvHYsbgdustY+4XJPIoLPWNhljFgKnAz9VV+jUkNy5ExdZa28DbnO7DgFrbT3ONkpSyEBtp3Qd0CHAGPMHnEFUPs5qa+3fDWY96UzrInVoXaQWrQ8RERHpCwVQERERERERGRQ6B1REREREREQGhQKoiIiIiIiIDAoFUBERkcNkjLnAGJPXT891gzEmZIx52RhzrDHme8aYbGPM7caYkw/yGGOMifS67THGhPujHhERkYGgACoiItIHyXDnN8aYXnefA1zdaxljjAkYYzzJ2y8ZY5YmL/HQ+2epMebDo2T7gJuALiAMXGStbQJOA3YdpKyFwKpeobMCqDLG+JOvHzyydy0iItK/dBkWERGRvpkB3At0GWMSwBRgCzDLGPN9YBPO9ev8wIXAO0AUyDrI88W6Z4wxIWA3YIE8nGC5KNnyGbHWbk0uF7TWRns9x98BPwceMMaMBDKSr/9WMif7jTFzrLWdR/rmRURE+oMCqIiISB9Ya1caY6YD/40T+v4CnAsUJu/7e6DYWvvXXg9bjhM0Oz70dCGcoNgtAJwMzAVmA+8CdcDXAY8xZjlO62azMWaGtbbZGHMG8CWca97+HvgCMAm4CLg5+bxPK3yKiEgqUQAVERHpuxtwWif/42N+lwU8ZIy5CidQ/gPQyEfDZze/MWYxTivmWmArMCK5fANQD5wA/NJa+yNjzMPAz5Lhswy4E2jC6bJbCvwT8A2gu2vvr4FFQOsRvF8REZF+pQAqIiLSB8aYUuCrwOnW2g5jjA+ny20A8Ftr3zTGXAD8DDjBWvuEMeYuYD9OK2hJ8qn24rR+5ltrz0k+91igFidE/hAn4J6bXG5W8nEVwPvJ+anAPcD5ydtxYDwHWj5J3k70319ARETkyCmAioiI9IG1do8x5hzgOWNMDCcEPgcEgVHJbrK3AHOttTb5sJk4LZqdOK2bAFU4oTXQ6+nzcbrw/gBngMCncULrCcCryZF2s6y1dclaXgJeMsac3+s59uJ0xe323X554yIiIv1IAVRERKTvtgJzcLrXvmKt/R6AMeZbwNnAg73CJzjfs0/gdJVdmLzvVSAb51xNAKy1K4wxJwFvAPOAM4AzrbXtxpg/JZ/j5U+prR1nUKTet0VERFKK+eD3pIiIiPSFMebnQARn9NoTgHOsta29fm+Az+K0kAJ8MTl9NjnttNa+0Gv5icA/43SdnQz8u7X2zuT9m3C6/r70oRrWAyfhDIS0AljX69fHAkdZa/f0w9sVERHpF2oBFREROQTJYDkZ59qc38IJmPfgXI5lC7DHWpsAxgE/5kBLZHcX3KOTU78xZqm1tjF5ewvwMM45oDcC04wx5+FcG/QfgTuMMVdaaxf3LgenK68BVllrF/aq81WcEXR91tqu/nr/IiIiR0ItoCIiIn1gjMnHab0cCazG6Rb7SPLXFwNfxmkJrQU+g3M+ZhPOtT3hg+eAghMas3EGEmpJPvdq4CfJ800vA64CvmGt3WSMWYgTTM/tbmlNBt7bgfNwBiL6MA9wm7X2/iN8+yIiIv1CAVRERKSPjDGjgKpkC+fBlolYa1sGsSwREZEhQwFUREREREREBoXH7QJEREREREQkPSiAioiIiIiIyKBQABUREREREZFBoQAqIiIiIiIig0IBVERERERERAbF/weVCwS9N3qiVAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 936x648 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化缩放前后的分布对比\n",
    "# 在整个变量上操作（不分训练集与测试集）\n",
    "\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "fig, ax = plt.subplots(2,1, figsize = (13,9))\n",
    "sns.distplot(X[:,0], hist = True, kde=True, ax=ax[0])\n",
    "ax[0].set_title('原分布直方图', fontsize=12)\n",
    "ax[0].set_xlabel('变量数值', fontsize=12)\n",
    "ax[0].set_ylabel('频率', fontsize=12); # 这个变量为长尾分布\n",
    "\n",
    "model = PowerTransformer(method='box-cox', standardize=True)\n",
    "model.fit(X[:,0].reshape(-1,1)) \n",
    "result = model.transform(X[:,0].reshape(-1,1)).reshape(-1)\n",
    "\n",
    "# 可视化整个变量上缩放的结果\n",
    "sns.distplot(result, hist = True, kde=True, ax=ax[1])\n",
    "ax[1].set_title('变换后的分布直方图', fontsize=12)\n",
    "ax[1].set_xlabel('变量数值', fontsize=12)\n",
    "ax[1].set_ylabel('频率', fontsize=12); # 分布变为正态分布\n",
    "fig.tight_layout() "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Yeo-Johnson 变换"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Yeo Johnson 变换适用于正数和负数，并假设以下分布：  \n",
    "$x_i(\\lambda) = \\left\\{\\begin{matrix}\n",
    "\\frac{[(x_i + 1)^{\\lambda} -1]}{\\lambda} & if \\, \\, \\lambda\\neq 0, x_i \\geq  0 \\\\ \n",
    "ln(x_i + 1) & if \\, \\, \\lambda =  0, x_i \\geq  0\\\\ \n",
    "-\\frac{[(-x_i + 1)^{2- \\lambda} -1]}{2-\\lambda} & if \\, \\, \\lambda\\neq 2, x_i <  0 \\\\ \n",
    "-ln(-x_i + 1) & if \\, \\, \\lambda =  2, x_i <  0\\\\ \n",
    "\\end{matrix}\\right.$  \n",
    "考虑了所有的 λ 值，通过最大似然估计选择稳定方差和最小化偏度的最优值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:06.877345Z",
     "start_time": "2020-02-29T21:35:06.850634Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import PowerTransformer\n",
    "\n",
    "# 为了模拟数据科学家的实际操作，我们将\n",
    "# 在训练集上训练 PowerTransformer 然后转换测试集\n",
    "# 将第一列中的前十个样本作为测试集\n",
    "# 将第一列中的其余样本作为训练集\n",
    "\n",
    "test_set = X[0:10,0]\n",
    "# 返回 array([8.3252, 8.3014, 7.2574, 5.6431, 3.8462, 4.0368, 3.6591, 3.12, 2.0804, 3.6912])\n",
    "train_set = X[10:,0]\n",
    "\n",
    "model = PowerTransformer(method='yeo-johnson', standardize=True)\n",
    "# 使用 yeo-johnson 变换\n",
    "\n",
    "model.fit(train_set.reshape(-1,1)) # 在训练集上测试\n",
    "# 转换缩放训练集与测试集\n",
    "transformed_train = model.transform(train_set.reshape(-1,1)).reshape(-1) # 转换训练集\n",
    "transformed_test = model.transform(test_set.reshape(-1,1)).reshape(-1) # 转换测试集\n",
    "\n",
    "# 以测试集结果为例：\n",
    "# transformed_test =  array([ 1.90367888,  1.89747091,  1.604735  ,  1.05166306,  0.20617221,\n",
    "# 0.31245176,  0.09685566, -0.25011726, -1.10512438,  0.11598074])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:07.556530Z",
     "start_time": "2020-02-29T21:35:06.878977Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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9wG/SZTPfsBfgHKCKbt9gR8AVwBbp/beArwKVO3F7ysiItKmVEBFRERawcz6Al8DjnP3WjNLI5hymwGku/sMMzsd+A1wiLs/YmZ/BTYRjIL2SexqHcHoZ3d3Pymx76HARoIS+QuCgntyYrtJifsNBpYkLu8H3A6clvg5Bgzn05FPEj/H2+4vICIisvdUQEVERFrB3UvM7CTgaTNrICiBTwOZwKDENNnfAQe5uyfuNpFgRLOeYHQTYDVBac1osvvuBFN4f06wQODjBKX1EODlxEq7+e5emsjyPPC8mZ3WZB/rCKbibvWdNvnFRURE2pAKqIiISOstBQ4kmF77krt/H8DMvgl8CbinSfmE4HX2EYKpstMS170MFBAcqwmAu88xs8OAN4ApwPHACe5eY2b/SuzjxV1kqyFYFKnpzyIiIinFtn+dFBERkdYws5uBPILVaw8BTnL3qia3G3AswQgpwBcT359IfK9392ebbD8S+CHB1Nl9gJ+4+18S139MMPX3+WYZPgQOI1gIaQ7wQZObDwBGu3tJG/y6IiIibUIjoCIiIrshUSz3ITg35zcJCubtBKdjWQyUuHscGAZcz6cjkVun4O6b+J5uZrPcfUvi58XAfQTHgP4YGGtmpxKcG/R7wHQz+w93f61pHIKpvAa86+7TmuR8mWAF3TR3b2yr319ERGRvaARURESkFcysO8Ho5UBgLsG02PsTN58NnEIwEroROIbgeMxygnN7wvbHgEJQGgsIFhKqTOx7LnBj4njT84ALgSvc/WMzm0ZQTE/eOtKaKLx/Bk4lWIiouQhwq7vfuZe/voiISJtQARUREWklMxsErE6McO5omzx3r0xiLBERkQ5DBVRERERERESSIhJ2ABEREREREekaVEBFREREREQkKVRARUREREREJClUQEVERERERCQpVEBFREREREQkKVRARUREREREJClUQEVERERERCQpVEBFREREREQkKVRARURE9pKZWQvXpYWRRUREJJWpgIqISIdnZqebWdFObv+3mY1t8vM/zWyfVu47y8yGmdmxZnalmd1qZlnNNjvYzJ5rdt0rZjZxF/veJ/F9mJkd3YosETN7xcyKW5M9cZ8cM4u2ctuImU1r7b5FRER2lz6dFRGRDsXMIkAUaHR3T1x9EjAY+G1iGwPSE9vEgVqgPHHbPsAXgZ6Jgcsl7n5Js8eY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\n",
      "text/plain": [
       "<Figure size 936x648 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化缩放前后的分布对比\n",
    "# 在整个变量上操作（不分训练集与测试集）\n",
    "\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "fig, ax = plt.subplots(2,1, figsize = (13,9))\n",
    "sns.distplot(X[:,0], hist = True, kde=True, ax=ax[0])\n",
    "ax[0].set_title('原分布直方图', fontsize=12)\n",
    "ax[0].set_xlabel('变量数值', fontsize=12)\n",
    "ax[0].set_ylabel('频率', fontsize=12); # 这个变量为长尾分布\n",
    "\n",
    "model = PowerTransformer(method='yeo-johnson', standardize=True)\n",
    "model.fit(X[:,0].reshape(-1,1)) \n",
    "result = model.transform(X[:,0].reshape(-1,1)).reshape(-1)\n",
    "\n",
    "# 可视化整个变量上缩放的结果\n",
    "sns.distplot(result, hist = True, kde=True, ax=ax[1])\n",
    "ax[1].set_title('变换后的分布直方图', fontsize=12)\n",
    "ax[1].set_xlabel('变量数值', fontsize=12)\n",
    "ax[1].set_ylabel('频率', fontsize=12); # 分布变为正态分布\n",
    "fig.tight_layout() "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Normalization 正则化"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以上所有缩放方法均为列操作。但正则化为行操作，它试图“缩放”每个样本，使其具有单位范数。由于正则化在每一行都独立起作用，它会扭曲特征之间的关系，因此较为不常见。但是正则化方法在文本分类和上下文聚类中是非常有效的。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "假设 X[i][j] 表示样本 i 中特征 j 的值  \n",
    "L1 正则化公式：: $X[i][j] = \\frac{X[i][j]}{\\sum_{j=1|X[i][j]|}}$  \n",
    "L2 正则化公式：: $X[i][j] = \\frac{X[i][j]}{\\sqrt{\\sum_{j=1}X[i][j]^2}}$  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "cell_style": "center"
   },
   "source": [
    "##### L1 正则化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:07.562437Z",
     "start_time": "2020-02-29T21:35:07.558254Z"
    },
    "cell_style": "center"
   },
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import Normalizer\n",
    "\n",
    "# Normalizer对每一行独立执行操作\n",
    "# 因此，其无需训练 （但是在scikit-learn中，为了保持与其他模块的一致，此处仍需使用fit方法，但是对结果无影响）\n",
    "\n",
    "###### 使用 L1 正则化\n",
    "sample_columns = X[0:2,0:3] # 选择前三个变量的前两个样本作为范例\n",
    "# 返回 array([[ 8.3252, 41., 6.98412698],\n",
    "# [ 8.3014 , 21.,  6.23813708]])\n",
    "\n",
    "model = Normalizer(norm='l1')\n",
    "\n",
    "model.fit(sample_columns) \n",
    "\n",
    "result = model.transform(sample_columns) # 因Normalizer与训练集测试集无关，故此处我们不做训练集划分\n",
    "# 返回 array([[0.14784762, 0.72812094, 0.12403144],\n",
    "# [0.23358211, 0.59089121, 0.17552668]])\n",
    "# 返回结果与以下代码的返回结果一致\n",
    "# sample_columns/np.sum(np.abs(sample_columns), axis=1).reshape(-1,1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "cell_style": "center"
   },
   "source": [
    "##### L2 正则化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:07.568605Z",
     "start_time": "2020-02-29T21:35:07.564511Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import Normalizer\n",
    "\n",
    "# Normalizer对每一行独立执行操作\n",
    "# 因此，其无需训练 （但是在scikit-learn中，为了保持与其他模块的一致，此处仍需使用fit方法，但是对结果无影响）\n",
    "\n",
    "###### 使用 L2 正则化\n",
    "sample_columns = X[0:2,0:3] # 选择前三个变量的前两个样本作为范例\n",
    "# 返回 array([[ 8.3252, 41., 6.98412698],\n",
    "# [ 8.3014 , 21.,  6.23813708]])\n",
    "\n",
    "model = Normalizer(norm='l2')\n",
    "\n",
    "model.fit(sample_columns) \n",
    "\n",
    "result = model.transform(sample_columns) # 因Normalizer与训练集测试集无关，故此处我们不做训练集划分\n",
    "# 返回 array([[0.19627663, 0.96662445, 0.16465922],\n",
    "# [0.35435076, 0.89639892, 0.26627902]])\n",
    "# 返回结果与以下代码的返回结果一致\n",
    "# sample_columns/np.sqrt(np.sum(sample_columns**2, axis=1)).reshape(-1,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:08.532679Z",
     "start_time": "2020-02-29T21:35:07.570568Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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K51jxd0/5es3LOYv7tpKY02Y/+8vLmRGPEwpsLw2kKfJMYRC7ngvecJSACoiIiIiInIChrrjBtbSWBPmn5adT6Fo+fNDMqHr21s5pzmB56nf60j0VRERERERETkBQ91xQ47h5ssW4LsuN973RGVWaGcqw+pNHexNZ9Ud9ygUgIqIiIiIiJwgxzE0xn3OmBnDMaYSfA7pTGUoBpbn9qYVhI5AAaiIiIiIiMjr4PsesZCH65jKjNAhLckojjHccO82uvvz47TCiUsBqIiIiIiIyOvUmAgT9gzrVlxUCUJbklHWrbiI/f05OlMZ8sXSOK9y4lETIhERERERkdfJcQwzYmGyxYCvXP8mHAOBhWJQ4mMPPkNLMorvqRvu4ZQBFREREREROQme59BSH6M26uEYw879A3zswafp6stx7/vfhMWyKzVAVzqn/aCDlAEVERERERE5SY5jaEpECOKWeNjji39xIVHfZW9vjmvXPV4Zz3LXtW0sbE7gOGa8lzyulAEVERERERE5RY5jaEyEmZuMUQrghnu3DRvPoqZEZQpARUREREREqihfLI04nkVNiRSAioiIiIiIVJUxI49nMWZ6l9+CAlAREREREZGqcg3cvmzRsPEsty9bhKv4U02IREREREREqslxHL76+Iusufxc6qMhejIFfvzcXubPPJNdqQF8z6Uh7k/LhkQKQEVERERERKqoIe7z129fWGlE9MfnNvF3f3IOz+1JE/NdBvIlTm+IcUZDfNoFoQpARUREREREqshxDAubE3zrpkvJF0uEXIcXuvpY89DTlbEsa5cvoj4WYkY8PN7LHVPaAyoiIiIiIlJlh45lKZQCbt2yfdhYllu3bCeTn35dcRWAioiIiIiIjKKStSOOZSnZcVrQOFIAKiIiIiIiMooiIXfEsSyR0PQLx6bfKxYRERERERlDM+Nh7rq2bdhYlruubWPmNNv/CWpCJCIiIiIiMqoOb0qkMSwiIiIiIiIyaoaaEh0qCCzd/flpFZQqABURERERERljQWB5bm+6Mit0qCx3YXNiSgehEyYANcbcA5wLfMda++kRHq8Dvgm4QD9wlbU2P7arFBEREREROXXd/XluuHcbjTVh1lx+LvXREHsOZGmuDU/p2aATogmRMea9gGutXQKcaYxZMMJhK4B/sdb+MbAH+JOxXKOIiIiIiEi15IslGmvCfPSd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\n",
      "text/plain": [
       "<Figure size 936x648 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 可视化正则化之后的分布变化\n",
    "# 将其与稳健缩放做对比\n",
    "# 在整个变量上操作（不分训练集与测试集）\n",
    "\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# RobustScaler\n",
    "fig, ax = plt.subplots(2,1, figsize = (13,9))\n",
    "\n",
    "model = RobustScaler(with_centering = True, with_scaling = True, \n",
    "                    quantile_range = (25.0, 75.0))\n",
    "model.fit(X[:,0:2]) \n",
    "result = model.transform(X[:,0:2])\n",
    "\n",
    "sns.scatterplot(result[:,0], result[:,1], ax=ax[0]) # 选取第一个和第二个变量作为范例\n",
    "ax[0].set_title('稳健变换后的散点图', fontsize=12)\n",
    "ax[0].set_xlabel('第一个变量', fontsize=12)\n",
    "ax[0].set_ylabel('第二个变量', fontsize=12);\n",
    "\n",
    "model = Normalizer(norm='l2') # 使用l2范数\n",
    "\n",
    "model.fit(X[:,0:2]) \n",
    "result = model.transform(X[:,0:2])\n",
    "\n",
    "sns.scatterplot(result[:,0], result[:,1], ax=ax[1])\n",
    "ax[1].set_title('正则变换后的散点图', fontsize=12)\n",
    "ax[1].set_xlabel('第一个变量', fontsize=12)\n",
    "ax[1].set_ylabel('第二个变量', fontsize=12);\n",
    "fig.tight_layout()  # 正则化会扭曲原数据中的变量关系"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Imputation of missing values 缺失值填补"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在实际操作中，数据集中可能存在缺失值。然而，这种稀疏的数据集与大多数 scikit-learn的模型不兼容，scikit-learn的模型假设所有特征都是数值的，且没有丢失值。所以在应用 scikit-learn 的模型之前，我们需要估算缺失的值  \n",
    "\n",
    "但是一些新的模型，比如在其他包中实现的 XGboost、LightGBM 和 Catboost，均为数据集中丢失的值提供了支持。所以在应用这些模型时，我们不再需要填充数据集中丢失的值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Univariate feature imputation 单变量特征插补"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "假设第 i 列中有缺失值，那么我们将用常数或第 i 列的统计数据（平均值、中值或众数）对其进行估算"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:08.596155Z",
     "start_time": "2020-02-29T21:35:08.534866Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.impute import SimpleImputer\n",
    "\n",
    "test_set = X[0:10,0].copy() # 选择前十个变量作为测试集，无缺失值\n",
    "# 返回 array([8.3252, 8.3014, 7.2574, 5.6431, 3.8462, 4.0368, 3.6591, 3.12, 2.0804, 3.6912])\n",
    "\n",
    "# 手动生成缺失值\n",
    "test_set[3] = np.nan\n",
    "test_set[6] = np.nan\n",
    "# 现在测试集变成如下： \n",
    "# array([8.3252, 8.3014, 7.2574,    nan, 3.8462, 4.0368,    nan, 3.12 ,2.0804, 3.6912])\n",
    "\n",
    "# 生成训练集，选择其余的样本作为训练集并手动生成缺失值\n",
    "train_set = X[10:,0].copy()\n",
    "train_set[3] = np.nan\n",
    "train_set[6] = np.nan\n",
    "\n",
    "imputer = SimpleImputer(missing_values=np.nan, strategy='mean') # 使用样本均值来填补缺失值\n",
    "# 其余的填补方法： 'mean', 'median', 'most_frequent', 'constant'\n",
    "imputer.fit(train_set.reshape(-1,1)) # 在训练集上训练\n",
    "# 转换填补训练集与测试集\n",
    "imputed_train = imputer.transform(train_set.reshape(-1,1)).reshape(-1) # 转换训练集\n",
    "imputed_test = imputer.transform(test_set.reshape(-1,1)).reshape(-1) # 转换测试集\n",
    "\n",
    "# 以测试集结果为例：\n",
    "# imputed_test =  array([8.3252    , 8.3014    , 7.2574    , 3.87023658, 3.8462    ,\n",
    "# 4.0368    , 3.87023658, 3.12      , 2.0804    , 3.6912    ])\n",
    "# 所有的缺失值将会被 3.87023658填补\n",
    "# 3.87023658 = np.nanmean(train_set) \n",
    "# 3.87023658 恰恰是训练集中除去缺失值后的均值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-01-07T16:53:20.341003Z",
     "start_time": "2020-01-07T16:53:20.336057Z"
    }
   },
   "source": [
    "#### Multivariate feature imputation 多元特征插补"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "多元特征插补利用整个数据集的信息来估计和插补缺失值。在 scikit-learn 中，它以循环迭代的方式实现。\n",
    "\n",
    "在每一步中，一个包含缺失值的特征列被指定为输出 y，其他特征列被视为输入 X。一个回归器在X上被训练然后用以预测y中的缺失值。这是以迭代的方式对每个特征进行，直到达到最大迭代次数限制。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 使用线性模型（以 BayesianRidge 为例）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:08.912010Z",
     "start_time": "2020-02-29T21:35:08.597954Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.experimental import enable_iterative_imputer # 在现有版本下0.22，必须激活这个函数才可以使用IterativeImputer\n",
    "from sklearn.impute import IterativeImputer\n",
    "from sklearn.linear_model import BayesianRidge\n",
    "\n",
    "test_set = X[0:10,:].copy() # 无缺失值，选择所有变量的前十个样本作为测试集\n",
    "# 第一个变量为\n",
    "# array([8.3252, 8.3014, 7.2574, 5.6431, 3.8462, 4.0368, 3.6591, 3.12, 2.0804, 3.6912])\n",
    "\n",
    "# 手动生成一些缺失值\n",
    "test_set[3,0] = np.nan\n",
    "test_set[6,0] = np.nan\n",
    "test_set[3,1] = np.nan\n",
    "# 现在第一个变量将变为\n",
    "# array([8.3252, 8.3014, 7.2574,    nan, 3.8462, 4.0368,    nan, 3.12 ,2.0804, 3.6912])\n",
    "\n",
    "# 生成训练集，选择其余的样本作为训练集并手动生成缺失值\n",
    "train_set = X[10:,:].copy()\n",
    "train_set[3,0] = np.nan\n",
    "train_set[6,0] = np.nan\n",
    "train_set[3,1] = np.nan\n",
    "\n",
    "impute_estimator = BayesianRidge()\n",
    "imputer = IterativeImputer(max_iter = 10, \n",
    "                           random_state = 0, \n",
    "                           estimator = impute_estimator)\n",
    "\n",
    "imputer.fit(train_set) # 在训练集上训练\n",
    "\n",
    "# 转换填补训练集与测试集\n",
    "imputed_train = imputer.transform(train_set) # 转换训练集\n",
    "imputed_test = imputer.transform(test_set)# 转换测试集\n",
    "\n",
    "result = imputer.transform(test_set)[:,0] # 仅选择第一个变量来展示结果\n",
    "# result =  array([8.3252    , 8.3014    , 7.2574    , 4.6237195 , 3.8462    ,\n",
    "# 4.0368    , 4.00258149, 3.12      , 2.0804    , 3.6912    ]) # 可见缺失值已被填补"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-01-07T17:27:44.194064Z",
     "start_time": "2020-01-07T17:27:44.188925Z"
    }
   },
   "source": [
    "##### 使用基于树的模型（以 ExtraTrees 为例）："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.011945Z",
     "start_time": "2020-02-29T21:35:08.916458Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.experimental import enable_iterative_imputer # 在现有版本下0.22，必须激活这个函数才可以使用IterativeImputer\n",
    "from sklearn.impute import IterativeImputer\n",
    "from sklearn.ensemble import ExtraTreesRegressor\n",
    "\n",
    "test_set = X[0:10,:].copy() # 无缺失值，选择所有变量的前十个样本作为测试集\n",
    "# 第一个变量为\n",
    "# array([8.3252, 8.3014, 7.2574, 5.6431, 3.8462, 4.0368, 3.6591, 3.12, 2.0804, 3.6912])\n",
    "\n",
    "# 手动生成一些缺失值\n",
    "test_set[3,0] = np.nan\n",
    "test_set[6,0] = np.nan\n",
    "test_set[3,1] = np.nan\n",
    "# 现在第一个变量将变为\n",
    "# array([8.3252, 8.3014, 7.2574,    nan, 3.8462, 4.0368,    nan, 3.12 ,2.0804, 3.6912])\n",
    "\n",
    "# 生成训练集，选择其余的样本作为训练集并手动生成缺失值\n",
    "train_set = X[10:,:].copy()\n",
    "train_set[3,0] = np.nan\n",
    "train_set[6,0] = np.nan\n",
    "train_set[3,1] = np.nan\n",
    "\n",
    "impute_estimator = ExtraTreesRegressor(n_estimators=10, random_state=0)\n",
    "imputer = IterativeImputer(max_iter = 10, \n",
    "                           random_state = 0, \n",
    "                           estimator = impute_estimator)\n",
    "\n",
    "imputer.fit(train_set) # 在训练集上训练\n",
    "\n",
    "# 转换填补训练集与测试集\n",
    "imputed_train = imputer.transform(train_set) # 转换训练集\n",
    "imputed_test = imputer.transform(test_set)# 转换测试集\n",
    "\n",
    "result = imputer.transform(test_set)[:,0] # 仅选择第一个变量来展示结果\n",
    "# result =  array([8.3252 , 8.3014 , 7.2574 , 4.63813, 3.8462 , 4.0368 , 3.24721,\n",
    "# 3.12   , 2.0804 , 3.6912 ]) # 可见缺失值已被填补"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-01-07T17:30:41.211593Z",
     "start_time": "2020-01-07T17:30:41.206774Z"
    }
   },
   "source": [
    "##### 使用 K 近邻（KNN）："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.173020Z",
     "start_time": "2020-02-29T21:35:12.015125Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.experimental import enable_iterative_imputer # 在现有版本下0.22，必须激活这个函数才可以使用IterativeImputer\n",
    "from sklearn.impute import IterativeImputer\n",
    "from sklearn.neighbors import KNeighborsRegressor\n",
    "\n",
    "test_set = X[0:10,:].copy() # 无缺失值，选择所有变量的前十个样本作为测试集\n",
    "# 第一个变量为\n",
    "# array([8.3252, 8.3014, 7.2574, 5.6431, 3.8462, 4.0368, 3.6591, 3.12, 2.0804, 3.6912])\n",
    "\n",
    "# 手动生成一些缺失值\n",
    "test_set[3,0] = np.nan\n",
    "test_set[6,0] = np.nan\n",
    "test_set[3,1] = np.nan\n",
    "# 现在第一个变量将变为\n",
    "# array([8.3252, 8.3014, 7.2574,    nan, 3.8462, 4.0368,    nan, 3.12 ,2.0804, 3.6912])\n",
    "\n",
    "# 生成训练集，选择其余的样本作为训练集并手动生成缺失值\n",
    "train_set = X[10:,:].copy()\n",
    "train_set[3,0] = np.nan\n",
    "train_set[6,0] = np.nan\n",
    "train_set[3,1] = np.nan\n",
    "\n",
    "impute_estimator = KNeighborsRegressor(n_neighbors=10, \n",
    "                                       p = 1)  # 设置 p=1 使用曼哈顿距离\n",
    "# 相比于平方差距离，曼哈顿距离对异常值没有那么敏感\n",
    "\n",
    "imputer = IterativeImputer(max_iter = 10, \n",
    "                           random_state = 0, \n",
    "                           estimator = impute_estimator)\n",
    "\n",
    "imputer.fit(train_set) # 在训练集上训练\n",
    "\n",
    "# 转换填补训练集与测试集\n",
    "imputed_train = imputer.transform(train_set) # 转换训练集\n",
    "imputed_test = imputer.transform(test_set)# 转换测试集\n",
    "\n",
    "result = imputer.transform(test_set)[:,0] # 仅选择第一个变量来展示结果\n",
    "# result =  array([8.3252, 8.3014, 7.2574, 3.6978, 3.8462, 4.0368, 4.052 , 3.12  ,\n",
    "# 2.0804, 3.6912]) # 可见缺失值已被填补"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Marking imputed values 标记估算值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "有时，数据缺失这一信息可能是有用的。因此，scikit learn 还提供了将包含缺失值的数据集转换为相应的二进制矩阵的功能，该矩阵指示数据集中缺失值的存在位置"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.179790Z",
     "start_time": "2020-02-29T21:35:12.174426Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.impute import MissingIndicator\n",
    "\n",
    "# 此标记与训练集测试集的划分无关，故仅以训练集作为例子\n",
    "\n",
    "train_set = X[10:,:].copy() # 选择全部的变量\n",
    "train_set[3,0] = np.nan # 手动生成数据缺失值\n",
    "train_set[6,0] = np.nan\n",
    "train_set[3,1] = np.nan\n",
    "\n",
    "indicator = MissingIndicator(missing_values=np.nan, features='all') \n",
    "# 标记训练集中的缺失值\n",
    "result = indicator.fit_transform(train_set) # result和训练集的形状一致\n",
    "# result中仅包含布尔值\n",
    "\n",
    "result[:,0].sum() # 等于2， 因为第一个变量中仅有两个缺失值\n",
    "result[:,1].sum(); # 等于 1, 因为第二个变量中有一个缺失值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Feature Transformation 特征变换"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Polynomial Transformation 多项式变换"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "有时我们希望在模型中引入非线性特征，从而增加模型的复杂度。对于简单的线性模型而言，这将大大增加模型的复杂度  \n",
    "但是对于更复杂的模型，如基于树的机器学习模型，它们已经在非参数的模型结构中包含了非线性关系。因此，这种特性转换可能对基于树的机器学习模型没有太大帮助。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "例如，如果我们将阶数设置为 3，则多项式变换的最终形式如下  \n",
    " $(X_1, X_2) => (1, X_1, X_2, X_1^2, X_1X_2, X_2^2, X_1^3, X_1^2X_2, X_1X_2^2, X_2^3)$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.185510Z",
     "start_time": "2020-02-29T21:35:12.181345Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "\n",
    "# 手工合成训练集与测试集\n",
    "train_set = np.array([2,3]).reshape(1,-1) # 形状为 (1,2)\n",
    "# train_set =  array([[2, 3]])\n",
    "\n",
    "test_set = np.array([4,3]).reshape(1,-1)\n",
    "# test_set = array([[4, 3]])\n",
    "\n",
    "poly = PolynomialFeatures(degree = 3, interaction_only = False)\n",
    "# 设置最高复杂度为3, 并且设置interaction_only=False，即我们需要的不仅仅是交叉项\n",
    "\n",
    "transformed_train = poly.fit_transform(train_set) # 形状 (1, 10)\n",
    "transformed_test = poly.fit_transform(test_set) # 形状 (1, 10)\n",
    "\n",
    "# 以训练集变换结果为例：\n",
    "# transformed_train = array([[ 1.,  2.,  3.,  4.,  6.,  9.,  8., 12., 18., 27.]])\n",
    "# 结果与前文的叙述一致"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Custom Transformation 自定义变换"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.191277Z",
     "start_time": "2020-02-29T21:35:12.187184Z"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import FunctionTransformer\n",
    "\n",
    "# 手工合成训练集与测试集\n",
    "train_set = np.array([2,3]).reshape(1,-1) # 形状为 (1,2)\n",
    "# train_set =  array([[2, 3]])\n",
    "\n",
    "test_set = np.array([4,3]).reshape(1,-1)\n",
    "# test_set = array([[4, 3]])\n",
    "\n",
    "transformer = FunctionTransformer(func = np.log1p, validate=True)\n",
    "# 使用 log 变换, X' = log(1 + x)\n",
    "# func 还可以为其他 numpy 方程，例如 numpy.exp\n",
    "\n",
    "transfromed_train = transformer.transform(train_set) # 形状为 (1,2)\n",
    "transfromed_test = transformer.transform(test_set) # 形状为 (1,2)\n",
    "\n",
    "# 以训练集结果为例\n",
    "# transfromed_train =  array([[1.09861229, 1.38629436]]), 与 np.log1p(train_set) 结果一致"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Static Categorical Variables 静态类别变量"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "真实世界的数据集还往往包含类别特征。但是由于scikit-learn中的模型只能处理数值特征，因此我们需要将类别特征编码为数值特征  \n",
    "\n",
    "但是，很多新的模型开始直接提供类别变量支持，例如lightGBM和Catboost。\n",
    "\n",
    "这里我们使用category_encoders包，因为它涵盖了更多的编码方法。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Ordinal Encoding 序数编码"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "序数编码将类别变量转化为一列序数变量，包含从1到类别数量之间的整数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.211329Z",
     "start_time": "2020-02-29T21:35:12.192880Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "from category_encoders import OrdinalEncoder\n",
    "# category_encoders 直接支持dataframe\n",
    "\n",
    "# 随机生成一些训练集\n",
    "train_set = pd.DataFrame(np.array([['male',10],['female', 20], ['male',10], \n",
    "                       ['female',20],['female',15]]),\n",
    "             columns = ['Sex','Type'])\n",
    "train_y = np.array([False, True, True, False, False])\n",
    "\n",
    "# 随机生成一些测试集, 并有意让其包含未在训练集出现过的类别与缺失值\n",
    "test_set = pd.DataFrame(np.array([['female',20],['male', 20], ['others',15], \n",
    "                       ['male',20],['female',40], ['male', 25]]),\n",
    "             columns = ['Sex','Type'])\n",
    "test_set.loc[4,'Type'] = np.nan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.221817Z",
     "start_time": "2020-02-29T21:35:12.212829Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>male</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>male</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>female</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Sex Type\n",
       "0    male   10\n",
       "1  female   20\n",
       "2    male   10\n",
       "3  female   20\n",
       "4  female   15"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_set # 原始训练集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.229463Z",
     "start_time": "2020-02-29T21:35:12.223193Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>others</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>male</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Sex Type\n",
       "0  female   20\n",
       "1    male   20\n",
       "2  others   15\n",
       "3    male   20\n",
       "4  female  NaN\n",
       "5    male   25"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_set # 原始测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.252146Z",
     "start_time": "2020-02-29T21:35:12.231510Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2.0</td>\n",
       "      <td>-2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1.0</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Sex  Type\n",
       "0  2.0   2.0\n",
       "1  1.0   2.0\n",
       "2 -1.0   3.0\n",
       "3  1.0   2.0\n",
       "4  2.0  -2.0\n",
       "5  1.0  -1.0"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "encoder = OrdinalEncoder(cols = ['Sex', 'Type'], \n",
    "                         handle_unknown = 'value', \n",
    "                         handle_missing = 'value').fit(train_set,train_y) # 在训练集上训练\n",
    "# 将 handle_unknown设为‘value’，即测试集中的未知特征值将被标记为-1\n",
    "# 将 handle_missing设为‘value’，即测试集中的缺失值将被标记为-2\n",
    "# 其他的选择为：‘error’：即报错； ‘return_nan’：即未知值/缺失之被标记为nan \n",
    "encoded_train = encoder.transform(train_set) # 转换训练集\n",
    "encoded_test = encoder.transform(test_set) # 转换测试集\n",
    "\n",
    "# 以测试集结果为例\n",
    "encoded_test\n",
    "\n",
    "# 在序数编码中： \n",
    "  \n",
    "# 变量Sex中: 'male' => 1.0, 'female' => 2.0, 未知 => -1.0, 缺失值 => -2.0\n",
    "# （事实上，测试集中完全有可能出现未知与缺失情况）\n",
    "# 在我们的例子中, Sex这一变量中的'other' 类别从未在训练集中出现过\n",
    "  \n",
    "# 变量 Type 中: 10 => 1.0, 20 => 2.0, 15 => 3.0, 未知 => -1.0, 缺失值 => -2.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.259973Z",
     "start_time": "2020-02-29T21:35:12.253463Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2.0</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Sex  Type\n",
       "0  1.0   1.0\n",
       "1  2.0   2.0\n",
       "2  1.0   1.0\n",
       "3  2.0   2.0\n",
       "4  2.0   3.0"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "encoded_train.astype(float) # 训练集结果"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### One-hot Encoding 独热编码"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Scikit-learn中也提供来独热编码函数，其可以将具有n_categories个可能值的一个分类特征转换为n_categories个二进制特征，其中一个为1，所有其他为0\n",
    "\n",
    "在category_encoders中，它包含了附加功能，即指示缺失或未知的值。在这里，我们继续使用category_encoders"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.267233Z",
     "start_time": "2020-02-29T21:35:12.261429Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "from category_encoders import OneHotEncoder\n",
    "# category_encoders 直接支持dataframe\n",
    "\n",
    "# 随机生成一些训练集\n",
    "train_set = pd.DataFrame(np.array([['male',10],['female', 20], ['male',10], \n",
    "                       ['female',20],['female',15]]),\n",
    "             columns = ['Sex','Type'])\n",
    "train_y = np.array([False, True, True, False, False])\n",
    "\n",
    "# 随机生成一些测试集, 并有意让其包含未在训练集出现过的类别与缺失值\n",
    "test_set = pd.DataFrame(np.array([['female',20],['male', 20], ['others',15], \n",
    "                       ['male',20],['female',40], ['male', 25]]),\n",
    "             columns = ['Sex','Type'])\n",
    "test_set.loc[4,'Type'] = np.nan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.274262Z",
     "start_time": "2020-02-29T21:35:12.268599Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>male</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>male</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>female</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Sex Type\n",
       "0    male   10\n",
       "1  female   20\n",
       "2    male   10\n",
       "3  female   20\n",
       "4  female   15"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_set # 原始训练集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.281903Z",
     "start_time": "2020-02-29T21:35:12.275680Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>others</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>male</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Sex Type\n",
       "0  female   20\n",
       "1    male   20\n",
       "2  others   15\n",
       "3    male   20\n",
       "4  female  NaN\n",
       "5    male   25"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_set  # 原始测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.315646Z",
     "start_time": "2020-02-29T21:35:12.283025Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex_male</th>\n",
       "      <th>Sex_female</th>\n",
       "      <th>Sex_nan</th>\n",
       "      <th>Sex_-1</th>\n",
       "      <th>Type_10</th>\n",
       "      <th>Type_20</th>\n",
       "      <th>Type_15</th>\n",
       "      <th>Type_nan</th>\n",
       "      <th>Type_-1</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Sex_male  Sex_female  Sex_nan  Sex_-1  Type_10  Type_20  Type_15  Type_nan  \\\n",
       "0         0           1        0       0        0        1        0         0   \n",
       "1         1           0        0       0        0        1        0         0   \n",
       "2         0           0        0       1        0        0        1         0   \n",
       "3         1           0        0       0        0        1        0         0   \n",
       "4         0           1        0       0        0        0        0         1   \n",
       "5         1           0        0       0        0        0        0         0   \n",
       "\n",
       "   Type_-1  \n",
       "0        0  \n",
       "1        0  \n",
       "2        0  \n",
       "3        0  \n",
       "4        0  \n",
       "5        1  "
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "encoder = OneHotEncoder(cols=['Sex', 'Type'], \n",
    "                        handle_unknown='indicator', \n",
    "                        handle_missing='indicator', \n",
    "                        use_cat_names=True).fit(train_set,train_y) # 在训练集上训练\n",
    "encoded_train = encoder.transform(train_set) # 转换训练集\n",
    "encoded_test = encoder.transform(test_set) # 转换测试集\n",
    "# 将 handle_unknown设为‘indicator’，即会新增一列指示未知特征值\n",
    "# 将 handle_missing设为‘indicator’，即会新增一列指示缺失值\n",
    "# 其他的handle_unknown/handle_missing 的选择为：\n",
    "# ‘error’：即报错; ‘return_nan’：即未知值/缺失之被标记为nan; ‘value’：即未知值/缺失之被标记为0\n",
    "\n",
    "# 以测试集结果为例\n",
    "encoded_test\n",
    "\n",
    "# 在独热编码中： \n",
    "  \n",
    "# 变量 Sex => 变为了4个新变量: 'male' => [1 ,0 ,0, 0];\n",
    "#                           'female' => [0 ,1 ,0, 0];\n",
    "#                           未知 =>  [0 ,0 ,0, 1];\n",
    "#                           缺失 => [0, 0, 1, 0];\n",
    "    \n",
    "# 变量 Type => 变为了5个新变量: 10 => [1, 0, 0, 0, 0];\n",
    "#                            20 => [0, 1, 0, 0, 0];, \n",
    "#                            15 => [0, 0, 1, 0, 0];\n",
    "#                            未知 => [0, 0, 0, 0, 1];\n",
    "#                            缺失 => [0, 0, 0, 1, 0];  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Hashing Encoding 哈希编码"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "哈希编码基于特征哈希的方法。它将哈希函数应用于变量，将任意数量的变量以一定的规则映射到给定数量的变量。特征哈希可能会导致要素之间发生冲突。但哈希编码的优点是它不需要制定和维护原变量与新变量之间的映射关系。因此，哈希编码器的大小及复杂程度不随数据类别的增多而增多。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.322943Z",
     "start_time": "2020-02-29T21:35:12.317053Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "from category_encoders.hashing import HashingEncoder\n",
    "# category_encoders 直接支持dataframe\n",
    "\n",
    "# 随机生成一些训练集\n",
    "train_set = pd.DataFrame(np.array([['male',10],['female', 20], ['male',10], \n",
    "                       ['female',20],['female',15]]),\n",
    "             columns = ['Sex','Type'])\n",
    "train_y = np.array([False, True, True, False, False])\n",
    "\n",
    "# 随机生成一些测试集, 并有意让其包含未在训练集出现过的类别与缺失值\n",
    "test_set = pd.DataFrame(np.array([['female',20],['male', 20], ['others',15], \n",
    "                       ['male',20],['female',40], ['male', 25]]),\n",
    "             columns = ['Sex','Type'])\n",
    "test_set.loc[4,'Type'] = np.nan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.330037Z",
     "start_time": "2020-02-29T21:35:12.324251Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>male</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>male</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>female</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Sex Type\n",
       "0    male   10\n",
       "1  female   20\n",
       "2    male   10\n",
       "3  female   20\n",
       "4  female   15"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_set # 原始训练集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.337651Z",
     "start_time": "2020-02-29T21:35:12.331658Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>others</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>male</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Sex Type\n",
       "0  female   20\n",
       "1    male   20\n",
       "2  others   15\n",
       "3    male   20\n",
       "4  female  NaN\n",
       "5    male   25"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_set # 原始测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.745450Z",
     "start_time": "2020-02-29T21:35:12.339279Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>col_0</th>\n",
       "      <th>col_1</th>\n",
       "      <th>col_2</th>\n",
       "      <th>col_3</th>\n",
       "      <th>col_4</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   col_0  col_1  col_2  col_3  col_4\n",
       "0      1      1      0      0      0\n",
       "1      0      1      0      0      1\n",
       "2      0      0      0      2      0\n",
       "3      0      1      0      0      1\n",
       "4      1      0      1      0      0\n",
       "5      0      0      0      0      2"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "encoder = HashingEncoder(cols=['Sex', 'Type'],  \n",
    "                         n_components = 5).fit(train_set,train_y)\n",
    "encoded_train = encoder.transform(train_set) # 转换训练集\n",
    "encoded_test = encoder.transform(test_set) # 转换测试集\n",
    "\n",
    "# 将两列的数据集哈希编码为5列\n",
    "# 哈希编码结果与训练集/测试集中的内容无关\n",
    "# 只要列名匹配，我们就可以在任何新数据集上使用哈希编码方法\n",
    "# 编码结果仅由哈希函数确定\n",
    "\n",
    "# 通常哈希编码应用于更高和更稀疏的维空间，这里以两个变量作为哈希编码的例子\n",
    "# 以测试集结果为例\n",
    "encoded_test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.754480Z",
     "start_time": "2020-02-29T21:35:12.747748Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>col_0</th>\n",
       "      <th>col_1</th>\n",
       "      <th>col_2</th>\n",
       "      <th>col_3</th>\n",
       "      <th>col_4</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   col_0  col_1  col_2  col_3  col_4\n",
       "0      0      0      0      0      2\n",
       "1      1      1      0      0      0\n",
       "2      0      0      0      0      2\n",
       "3      1      1      0      0      0\n",
       "4      1      0      0      1      0"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "encoded_train # 训练集结果"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Helmert Encoding Helmert 编码"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Helmert编码通常在计量经济学中使用。在Helmert编码（分类特征中的每个值对应于Helmert矩阵中的一行）之后，线性模型中编码后的变量系数可以反映在给定该类别变量某一类别值的情形下因变量的平均值与给定该类别其他类别值的情形下因变量的平均值的差值。在category_encoders包中实现的Helmert编码为反向Helmert编码。更多信息[link](https://www.statsmodels.org/devel/contrasts.html)。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.761886Z",
     "start_time": "2020-02-29T21:35:12.755790Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "from category_encoders import HelmertEncoder\n",
    "# category_encoders 直接支持dataframe\n",
    "\n",
    "# 随机生成一些训练集\n",
    "train_set = pd.DataFrame(np.array([['male',10],['female', 20], ['male',10], \n",
    "                       ['female',20],['female',15]]),\n",
    "             columns = ['Sex','Type'])\n",
    "train_y = np.array([False, True, True, False, False])\n",
    "\n",
    "# 随机生成一些测试集, 并有意让其包含未在训练集出现过的类别与缺失值\n",
    "test_set = pd.DataFrame(np.array([['female',20],['male', 20], ['others',15], \n",
    "                       ['male',20],['female',40], ['male', 25]]),\n",
    "             columns = ['Sex','Type'])\n",
    "test_set.loc[4,'Type'] = np.nan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.769563Z",
     "start_time": "2020-02-29T21:35:12.763683Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>male</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>male</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>female</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Sex Type\n",
       "0    male   10\n",
       "1  female   20\n",
       "2    male   10\n",
       "3  female   20\n",
       "4  female   15"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_set # 原始训练集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.776299Z",
     "start_time": "2020-02-29T21:35:12.770737Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>others</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>male</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Sex Type\n",
       "0  female   20\n",
       "1    male   20\n",
       "2  others   15\n",
       "3    male   20\n",
       "4  female  NaN\n",
       "5    male   25"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_set # 原始测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.815942Z",
     "start_time": "2020-02-29T21:35:12.777783Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>intercept</th>\n",
       "      <th>Sex_0</th>\n",
       "      <th>Sex_1</th>\n",
       "      <th>Sex_2</th>\n",
       "      <th>Type_0</th>\n",
       "      <th>Type_1</th>\n",
       "      <th>Type_2</th>\n",
       "      <th>Type_3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   intercept  Sex_0  Sex_1  Sex_2  Type_0  Type_1  Type_2  Type_3\n",
       "0          1    1.0   -1.0   -1.0     1.0    -1.0    -1.0    -1.0\n",
       "1          1   -1.0   -1.0   -1.0     1.0    -1.0    -1.0    -1.0\n",
       "2          1    0.0    0.0    3.0     0.0     2.0    -1.0    -1.0\n",
       "3          1   -1.0   -1.0   -1.0     1.0    -1.0    -1.0    -1.0\n",
       "4          1    1.0   -1.0   -1.0     0.0     0.0     3.0    -1.0\n",
       "5          1   -1.0   -1.0   -1.0     0.0     0.0     0.0     4.0"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "encoder = HelmertEncoder(cols=['Sex', 'Type'], \n",
    "                         handle_unknown='indicator', \n",
    "                         handle_missing='indicator').fit(train_set,train_y) # 在训练集上训练\n",
    "encoded_train = encoder.transform(train_set) # 转换训练集\n",
    "encoded_test = encoder.transform(test_set) # 转换测试集\n",
    "# 将 handle_unknown设为‘indicator’，即会新增一列指示未知特征值\n",
    "# 将 handle_missing设为‘indicator’，即会新增一列指示缺失值\n",
    "# 其他的handle_unknown/handle_missing 的选择为：\n",
    "# ‘error’：即报错; ‘return_nan’：即未知值/缺失之被标记为nan; ‘value’：即未知值/缺失之被标记为0\n",
    "\n",
    "# 以测试集结果为例\n",
    "encoded_test\n",
    "\n",
    "# 在Helmert编码中： \n",
    "  \n",
    "# 变量 Sex => 变为了4个新变量（包含常数项）: 'male' => [ 1. -1. -1. -1.];\n",
    "#                                      'female' => [ 1.  1. -1. -1.];\n",
    "#                                      未知 =>  [ 1.  0.  0.  3.];\n",
    "#                                      缺失 => [ 1.  0.  2. -1.];\n",
    "    \n",
    "# 变量 Type => 变为了5个新变量（包含常数项）: 10 => [ 1. -1. -1. -1. -1.];\n",
    "#                                        20 => [ 1.  1. -1. -1. -1.];, \n",
    "#                                        15 => [ 1.  0.  2. -1. -1.];\n",
    "#                                        未知 =>  [ 1.  0.  0.  0.  4.];\n",
    "#                                        缺失 => [ 1.  0.  0.  3. -1.];  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.821139Z",
     "start_time": "2020-02-29T21:35:12.817171Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 1. -1. -1. -1. -1.]\n",
      " [ 1.  1. -1. -1. -1.]\n",
      " [ 1.  0.  2. -1. -1.]\n",
      " [ 1.  0.  0.  3. -1.]\n",
      " [ 1.  0.  0.  0.  4.]]\n"
     ]
    }
   ],
   "source": [
    "# 可以通过如下代码计算变量Type的Helmert 矩阵\n",
    "\n",
    "from patsy.contrasts import Helmert\n",
    "levels = [1,2,3,4,5] # 3个变量值 + 1个未知值 + 1个缺失值\n",
    "contrast = Helmert().code_with_intercept(levels)\n",
    "print(contrast.matrix) # 第一列为常数项"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.832242Z",
     "start_time": "2020-02-29T21:35:12.822497Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>intercept</th>\n",
       "      <th>Sex_0</th>\n",
       "      <th>Sex_1</th>\n",
       "      <th>Sex_2</th>\n",
       "      <th>Type_0</th>\n",
       "      <th>Type_1</th>\n",
       "      <th>Type_2</th>\n",
       "      <th>Type_3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   intercept  Sex_0  Sex_1  Sex_2  Type_0  Type_1  Type_2  Type_3\n",
       "0          1   -1.0   -1.0   -1.0    -1.0    -1.0    -1.0    -1.0\n",
       "1          1    1.0   -1.0   -1.0     1.0    -1.0    -1.0    -1.0\n",
       "2          1   -1.0   -1.0   -1.0    -1.0    -1.0    -1.0    -1.0\n",
       "3          1    1.0   -1.0   -1.0     1.0    -1.0    -1.0    -1.0\n",
       "4          1    1.0   -1.0   -1.0     0.0     2.0    -1.0    -1.0"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "encoded_train # 训练集结果"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Sum (Deviation) Encoding  偏差编码"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "偏差编码也通常在计量经济学中被使用。偏差编码后，线性模型的系数可以反映该给定该类别变量值的情况下因变量的平均值与全局因变量的平均值的差异。更多信息[link](https://www.statsmodels.org/devel/contrasts.html)。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.838965Z",
     "start_time": "2020-02-29T21:35:12.833480Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "from category_encoders.sum_coding import SumEncoder\n",
    "# category_encoders 直接支持dataframe\n",
    "\n",
    "# 随机生成一些训练集\n",
    "train_set = pd.DataFrame(np.array([['male',10],['female', 20], ['male',10], \n",
    "                       ['female',20],['female',15]]),\n",
    "             columns = ['Sex','Type'])\n",
    "train_y = np.array([False, True, True, False, False])\n",
    "\n",
    "# 随机生成一些测试集, 并有意让其包含未在训练集出现过的类别与缺失值\n",
    "test_set = pd.DataFrame(np.array([['female',20],['male', 20], ['others',15], \n",
    "                       ['male',20],['female',40], ['male', 25]]),\n",
    "             columns = ['Sex','Type'])\n",
    "test_set.loc[4,'Type'] = np.nan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.846200Z",
     "start_time": "2020-02-29T21:35:12.840450Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>male</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>male</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>female</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Sex Type\n",
       "0    male   10\n",
       "1  female   20\n",
       "2    male   10\n",
       "3  female   20\n",
       "4  female   15"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_set # 原始训练集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.853772Z",
     "start_time": "2020-02-29T21:35:12.847780Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>others</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>male</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Sex Type\n",
       "0  female   20\n",
       "1    male   20\n",
       "2  others   15\n",
       "3    male   20\n",
       "4  female  NaN\n",
       "5    male   25"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_set # 原始测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.892432Z",
     "start_time": "2020-02-29T21:35:12.855016Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>intercept</th>\n",
       "      <th>Sex_0</th>\n",
       "      <th>Sex_1</th>\n",
       "      <th>Sex_2</th>\n",
       "      <th>Type_0</th>\n",
       "      <th>Type_1</th>\n",
       "      <th>Type_2</th>\n",
       "      <th>Type_3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   intercept  Sex_0  Sex_1  Sex_2  Type_0  Type_1  Type_2  Type_3\n",
       "0          1    0.0    1.0    0.0     0.0     1.0     0.0     0.0\n",
       "1          1    1.0    0.0    0.0     0.0     1.0     0.0     0.0\n",
       "2          1   -1.0   -1.0   -1.0     0.0     0.0     1.0     0.0\n",
       "3          1    1.0    0.0    0.0     0.0     1.0     0.0     0.0\n",
       "4          1    0.0    1.0    0.0     0.0     0.0     0.0     1.0\n",
       "5          1    1.0    0.0    0.0    -1.0    -1.0    -1.0    -1.0"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "encoder = SumEncoder(cols=['Sex', 'Type'], \n",
    "                     handle_unknown='indicator', \n",
    "                     handle_missing='indicator').fit(train_set,train_y) # 在训练集上训练\n",
    "encoded_train = encoder.transform(train_set) # 转换训练集\n",
    "encoded_test = encoder.transform(test_set) # 转换测试集\n",
    "# 将 handle_unknown设为‘indicator’，即会新增一列指示未知特征值\n",
    "# 将 handle_missing设为‘indicator’，即会新增一列指示缺失值\n",
    "# 其他的handle_unknown/handle_missing 的选择为：\n",
    "# ‘error’：即报错; ‘return_nan’：即未知值/缺失之被标记为nan; ‘value’：即未知值/缺失之被标记为0\n",
    "\n",
    "# 以测试集结果为例\n",
    "encoded_test\n",
    "\n",
    "# 在Helmert编码中： \n",
    "  \n",
    "# 变量 Sex => 变为了4个新变量（包含常数项）: 'male' => [ 1.  1.  0.  0.];\n",
    "#                                      'female' => [ 1.  0.  1.  0.];\n",
    "#                                       未知 =>  [ 1. -1. -1. -1.];\n",
    "#                                       缺失 => [ 1.  0.  0.  1.];\n",
    "    \n",
    "# 变量 Type => 变为了5个新变量（包含常数项）: 10 => [ 1.  1.  0.  0.  0.];\n",
    "#                                        20 => [ 1.  0.  1.  0.  0.];, \n",
    "#                                        15 => [ 1.  0.  0.  1.  0.];\n",
    "#                                        未知 =>  [ 1. -1. -1. -1. -1.];\n",
    "#                                        缺失 => [ 1.  0.  0.  0.  1.];  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.897719Z",
     "start_time": "2020-02-29T21:35:12.893717Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 1.  1.  0.  0.  0.]\n",
      " [ 1.  0.  1.  0.  0.]\n",
      " [ 1.  0.  0.  1.  0.]\n",
      " [ 1.  0.  0.  0.  1.]\n",
      " [ 1. -1. -1. -1. -1.]]\n"
     ]
    }
   ],
   "source": [
    "# 可以通过如下代码计算变量Type的Deviation 矩阵\n",
    "\n",
    "from patsy.contrasts import Sum\n",
    "levels = [1,2,3,4,5] # 3个变量值 + 1个未知值 + 1个缺失值\n",
    "contrast = Sum().code_with_intercept(levels)\n",
    "print(contrast.matrix) # 第一列为常数项"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.908598Z",
     "start_time": "2020-02-29T21:35:12.899080Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>intercept</th>\n",
       "      <th>Sex_0</th>\n",
       "      <th>Sex_1</th>\n",
       "      <th>Sex_2</th>\n",
       "      <th>Type_0</th>\n",
       "      <th>Type_1</th>\n",
       "      <th>Type_2</th>\n",
       "      <th>Type_3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   intercept  Sex_0  Sex_1  Sex_2  Type_0  Type_1  Type_2  Type_3\n",
       "0          1    1.0    0.0    0.0     1.0     0.0     0.0     0.0\n",
       "1          1    0.0    1.0    0.0     0.0     1.0     0.0     0.0\n",
       "2          1    1.0    0.0    0.0     1.0     0.0     0.0     0.0\n",
       "3          1    0.0    1.0    0.0     0.0     1.0     0.0     0.0\n",
       "4          1    0.0    1.0    0.0     0.0     0.0     1.0     0.0"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "encoded_train # 训练集结果"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Target Encoding 目标编码"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "目标编码是一种不仅基于特征值本身，还基于相应因变量的类别变量编码方法。\n",
    "\n",
    "对于分类问题：将类别特征替换为给定某一特定类别值的因变量后验概率与所有训练数据上因变量的先验概率的组合。\n",
    "\n",
    "对于连续目标：将类别特征替换为给定某一特定类别值的因变量目标期望值与所有训练数据上因变量的目标期望值的组合。\n",
    "\n",
    "该方法严重依赖于因变量的分布，但这大大减少了生成编码后特征的数量。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "公式：  \n",
    "$smoove = \\frac{1}{1+ exp(-\\frac{n-min\\_samples\\_leaf}{smoothing})}$  \n",
    "$X_k' = Prior\\_Prob* (1 - smoove) + smoove * Condition\\_Prob $  \n",
    "$Condition\\_Prob =\\frac{n^{+}}{n} $  \n",
    "\n",
    "其中min_samples_leaf和smoothing是用户定义的参数；  \n",
    "min_samples_leaf：计算类别平均值时的最小样本数（即若该类别出现次数少，则将被忽略），用以控制过拟合；  \n",
    "smoothing：平衡分类平均值与先验平均值的平滑系数。其值越高，则正则化越强；  \n",
    "$ X_k'$是类别特征X中类别为k的编码值；   \n",
    "Prior Prob：目标变量的先验概率/期望；  \n",
    "n：类别特征X中，类别为k的样本数；   \n",
    "$ n ^ {+} $：不仅在类别特征X中具有类别k，而且具有正结果的样本数（分类问题）；    \n",
    "\n",
    "参考文献: Micci-Barreca, D. (2001). A preprocessing scheme for high-cardinality categorical attributes in classification and prediction problems. ACM SIGKDD Explorations Newsletter, 3(1), 27-32."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.915581Z",
     "start_time": "2020-02-29T21:35:12.910101Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "from category_encoders.target_encoder import TargetEncoder\n",
    "# category_encoders 直接支持dataframe\n",
    "\n",
    "# 随机生成一些训练集\n",
    "train_set = pd.DataFrame(np.array([['male',10],['female', 20], ['male',10], \n",
    "                       ['female',20],['female',15]]),\n",
    "             columns = ['Sex','Type'])\n",
    "train_y = np.array([False, True, True, False, False])\n",
    "\n",
    "# 随机生成一些测试集, 并有意让其包含未在训练集出现过的类别与缺失值\n",
    "test_set = pd.DataFrame(np.array([['female',20],['male', 20], ['others',15], \n",
    "                       ['male',20],['female',40], ['male', 25]]),\n",
    "             columns = ['Sex','Type'])\n",
    "test_set.loc[4,'Type'] = np.nan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.922881Z",
     "start_time": "2020-02-29T21:35:12.917019Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>male</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>male</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>female</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Sex Type\n",
       "0    male   10\n",
       "1  female   20\n",
       "2    male   10\n",
       "3  female   20\n",
       "4  female   15"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_set # 原始训练集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:12.930311Z",
     "start_time": "2020-02-29T21:35:12.924392Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>others</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>male</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Sex Type\n",
       "0  female   20\n",
       "1    male   20\n",
       "2  others   15\n",
       "3    male   20\n",
       "4  female  NaN\n",
       "5    male   25"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_set # 原始测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.055948Z",
     "start_time": "2020-02-29T21:35:12.931593Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.341280</td>\n",
       "      <td>0.473106</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.473106</td>\n",
       "      <td>0.473106</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.400000</td>\n",
       "      <td>0.400000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.473106</td>\n",
       "      <td>0.473106</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.341280</td>\n",
       "      <td>0.400000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.473106</td>\n",
       "      <td>0.400000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        Sex      Type\n",
       "0  0.341280  0.473106\n",
       "1  0.473106  0.473106\n",
       "2  0.400000  0.400000\n",
       "3  0.473106  0.473106\n",
       "4  0.341280  0.400000\n",
       "5  0.473106  0.400000"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "encoder = TargetEncoder(cols=['Sex','Type'], \n",
    "                        handle_unknown='value',  \n",
    "                        handle_missing='value').fit(train_set,train_y) # 在训练集上训练\n",
    "encoded_train = encoder.transform(train_set) # 转换训练集\n",
    "encoded_test = encoder.transform(test_set) # 转换测试集\n",
    "\n",
    "# handle_unknown 和 handle_missing 被设定为 'value'\n",
    "# 在目标编码中，handle_unknown 和 handle_missing 仅接受 ‘error’, ‘return_nan’ 及 ‘value’ 设定\n",
    "# 两者的默认值均为 ‘value’, 即对未知类别或缺失值填充训练集的因变量平均值\n",
    "\n",
    "encoded_test # 编码后的变量数与原类别变量数一致"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.063024Z",
     "start_time": "2020-02-29T21:35:13.057499Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.4731058578630005"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 验证一下计算的结果，在测试集中，‘male’类别的编码值为 0.473106\n",
    "prior = train_y.mean() # 先验概率\n",
    "min_samples_leaf = 1.0 # 默认为1.0\n",
    "smoothing = 1.0 # 默认为1.0\n",
    "n = 2 # 训练集中，两个样本包含‘male’这个标签\n",
    "n_positive = 1 # 在训练集中，这两个包含‘male’标签的样本中仅有一个有正的因变量标签\n",
    "\n",
    "𝑠𝑚𝑜𝑜𝑣𝑒 = 1 / (1 + np.exp(-(n - min_samples_leaf) / smoothing))\n",
    "male_encode = prior * (1-𝑠𝑚𝑜𝑜𝑣𝑒) + 𝑠𝑚𝑜𝑜𝑣𝑒 * n_positive/n\n",
    "male_encode # return 0.4731058578630005，与要验证的值吻合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.070700Z",
     "start_time": "2020-02-29T21:35:13.064540Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.473106</td>\n",
       "      <td>0.473106</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.341280</td>\n",
       "      <td>0.473106</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.473106</td>\n",
       "      <td>0.473106</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.341280</td>\n",
       "      <td>0.473106</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.341280</td>\n",
       "      <td>0.400000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        Sex      Type\n",
       "0  0.473106  0.473106\n",
       "1  0.341280  0.473106\n",
       "2  0.473106  0.473106\n",
       "3  0.341280  0.473106\n",
       "4  0.341280  0.400000"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "encoded_train # 训练集结果"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### M-estimate Encoding M估计量编码"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "M估计量编码是目标编码的一个简化版本。与目标编码器相比，M估计量编码仅具有一个可调参数（m），而目标编码器具有两个可调参数（min_samples_leaf和smoothing）。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "公式：  \n",
    "$X_k' = \\frac{n^{+} + prior * m}{y^{+} + m}$   \n",
    "\n",
    "其中m为用户定义的参数；  \n",
    "m：m为非负数, m的值越高，先验概率的权重则更大。  \n",
    "$ X_k'$为类别特征X中类别k的编码值；    \n",
    "Prior：目标变量的先验概率/期望值；  \n",
    "$ n ^ {+} $：训练集中特征X类别为k，而且具有正因变量标签的样本数；  \n",
    "$ y ^ {+} $：训练集中具有正因变量标签的样本数；  \n",
    "\n",
    "参考文献：Micci-Barreca, D. (2001). A preprocessing scheme for high-cardinality categorical attributes in classification and prediction problems. ACM SIGKDD Explorations Newsletter, 3(1), 27-32."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.078125Z",
     "start_time": "2020-02-29T21:35:13.072195Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "from category_encoders.m_estimate import MEstimateEncoder\n",
    "# category_encoders 直接支持dataframe\n",
    "\n",
    "# 随机生成一些训练集\n",
    "train_set = pd.DataFrame(np.array([['male',10],['female', 20], ['male',10], \n",
    "                       ['female',20],['female',15]]),\n",
    "             columns = ['Sex','Type'])\n",
    "train_y = np.array([False, True, True, False, False])\n",
    "\n",
    "# 随机生成一些测试集, 并有意让其包含未在训练集出现过的类别与缺失值\n",
    "test_set = pd.DataFrame(np.array([['female',20],['male', 20], ['others',15], \n",
    "                       ['male',20],['female',40], ['male', 25]]),\n",
    "             columns = ['Sex','Type'])\n",
    "test_set.loc[4,'Type'] = np.nan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.086107Z",
     "start_time": "2020-02-29T21:35:13.079798Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>male</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>male</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>female</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Sex Type\n",
       "0    male   10\n",
       "1  female   20\n",
       "2    male   10\n",
       "3  female   20\n",
       "4  female   15"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_set # 原始训练集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.093453Z",
     "start_time": "2020-02-29T21:35:13.087531Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>others</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>male</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Sex Type\n",
       "0  female   20\n",
       "1    male   20\n",
       "2  others   15\n",
       "3    male   20\n",
       "4  female  NaN\n",
       "5    male   25"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_set # 原始测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.131595Z",
     "start_time": "2020-02-29T21:35:13.095019Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.350000</td>\n",
       "      <td>0.466667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.466667</td>\n",
       "      <td>0.466667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.400000</td>\n",
       "      <td>0.200000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.466667</td>\n",
       "      <td>0.466667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.350000</td>\n",
       "      <td>0.400000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.466667</td>\n",
       "      <td>0.400000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        Sex      Type\n",
       "0  0.350000  0.466667\n",
       "1  0.466667  0.466667\n",
       "2  0.400000  0.200000\n",
       "3  0.466667  0.466667\n",
       "4  0.350000  0.400000\n",
       "5  0.466667  0.400000"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "encoder = MEstimateEncoder(cols=['Sex','Type'], \n",
    "                           handle_unknown='value',  \n",
    "                           handle_missing='value').fit(train_set,train_y) # 在训练集上训练\n",
    "encoded_train = encoder.transform(train_set) # 转换训练集\n",
    "encoded_test = encoder.transform(test_set) # 转换测试集\n",
    "\n",
    "# handle_unknown 和 handle_missing 被设定为 'value'\n",
    "# 在目标编码中，handle_unknown 和 handle_missing 仅接受 ‘error’, ‘return_nan’ 及 ‘value’ 设定\n",
    "# 两者的默认值均为 ‘value’, 即对未知类别或缺失值填充训练集的因变量平均值\n",
    "\n",
    "encoded_test # 编码后的变量数与原类别变量数一致"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.137379Z",
     "start_time": "2020-02-29T21:35:13.132962Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.4666666666666666"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 验证一下计算的结果，在测试集中，‘male’类别的编码值为 0.466667\n",
    "\n",
    "y_positive = 2 # 在训练集中，共有两个样本有正的因变量标签\n",
    "n_positive = 1 # 在训练集中，共有两个样本在变量‘Sex’中有‘male’标签，在两个样本中仅有一个有正的因变量标签\n",
    "prior = train_y.mean() # 训练集因变量先验概率\n",
    "m = 1.0 # 默认值\n",
    "male_encode = (n_positive + prior * m)/(y_positive + m)\n",
    "male_encode # return 0.4666666666666666，与要验证的值吻合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.144389Z",
     "start_time": "2020-02-29T21:35:13.138584Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.466667</td>\n",
       "      <td>0.466667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.350000</td>\n",
       "      <td>0.466667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.466667</td>\n",
       "      <td>0.466667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.350000</td>\n",
       "      <td>0.466667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.350000</td>\n",
       "      <td>0.200000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        Sex      Type\n",
       "0  0.466667  0.466667\n",
       "1  0.350000  0.466667\n",
       "2  0.466667  0.466667\n",
       "3  0.350000  0.466667\n",
       "4  0.350000  0.200000"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "encoded_train # 训练集结果"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### James-Stein Encoder James-Stein 编码"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "James-Stein编码也是一种基于目标编码的编码方法。与M估计量编码一样，James-Stein编码器也尝试通过参数B来平衡先验概率与观测到的条件概率。但与目标编码与M估计量编码不同的是，James-Stein编码器通过方差比而不是样本大小来平衡两个概率。  \n",
    "\n",
    "James-Stein编码可使用独立方法，合并方法等多种方法来估计参数B。有关更多信息，请参阅[category_encoders官方网站](http://contrib.scikit-learn.org/categorical-encoding/jamesstein.html)。  \n",
    "\n",
    "James-Stein编码假定服从正态分布。因此为了满足所需的假设，Category Encoders默认使用对数比来转换二分类问题。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "独立方法的公式：  \n",
    "$X_k' = (1 - B) * Condition\\_Prob + B * prior $  \n",
    "$B = \\frac{Var(y^{k})}{Var(y^{k}) + Var(y)}$  \n",
    "$Condition\\_Prob =\\frac{n^{+}}{n} $  \n",
    "\n",
    "其中，  \n",
    "$ X_k'$是类别特征X中类别k的编码值；   \n",
    "先验概率：目标变量的先验概率/期望值；  \n",
    "$ n ^ {+} $：在训练集中，在类别特征X上的标签为k且具有因变量正标签的样本数；  \n",
    "$ n $： 在训练集中，在类别特征X上标签为k的样本数；\n",
    "$ Var（y ^ {k}）$：训练集中，在特征X上标签为k的样本因变量方差；\n",
    "$ Var（y）$：总体因变量的方差；\n",
    "$ Var（y ^ {k}）$和$ Var（y）$都应通过样本统计数据进行估算。  \n",
    "从直觉的角度来讲，B起到来平衡先验概率与观测到的条件概率的作用，若条件概率的均值不可靠（y_k具有高方差），则我们应当对先验概率赋予更大的权重。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.151965Z",
     "start_time": "2020-02-29T21:35:13.145919Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "from category_encoders.james_stein import JamesSteinEncoder\n",
    "# category_encoders 直接支持dataframe\n",
    "\n",
    "# 随机生成一些训练集\n",
    "train_set = pd.DataFrame(np.array([['male',10],['female', 20], ['male',10], \n",
    "                       ['female',20],['female',15]]),\n",
    "             columns = ['Sex','Type'])\n",
    "train_y = np.array([False, True, True, False, False])\n",
    "\n",
    "# 随机生成一些测试集, 并有意让其包含未在训练集出现过的类别与缺失值\n",
    "test_set = pd.DataFrame(np.array([['female',20],['male', 20], ['others',15], \n",
    "                       ['male',20],['female',40], ['male', 25]]),\n",
    "             columns = ['Sex','Type'])\n",
    "test_set.loc[4,'Type'] = np.nan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.159012Z",
     "start_time": "2020-02-29T21:35:13.153378Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>male</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>male</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>female</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Sex Type\n",
       "0    male   10\n",
       "1  female   20\n",
       "2    male   10\n",
       "3  female   20\n",
       "4  female   15"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_set # 原始训练集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.171097Z",
     "start_time": "2020-02-29T21:35:13.165183Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>others</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>male</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Sex Type\n",
       "0  female   20\n",
       "1    male   20\n",
       "2  others   15\n",
       "3    male   20\n",
       "4  female  NaN\n",
       "5    male   25"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_set # 原始测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.214796Z",
     "start_time": "2020-02-29T21:35:13.173129Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.400000</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        Sex  Type\n",
       "0  0.333333   0.5\n",
       "1  0.500000   0.5\n",
       "2  0.400000   0.0\n",
       "3  0.500000   0.5\n",
       "4  0.333333   0.4\n",
       "5  0.500000   0.4"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "encoder = JamesSteinEncoder(cols=['Sex','Type'], \n",
    "                           handle_unknown='value', \n",
    "                           model='independent',  \n",
    "                           handle_missing='value').fit(train_set,train_y) # 在训练集上训练\n",
    "encoded_train = encoder.transform(train_set) # 转换训练集\n",
    "encoded_test = encoder.transform(test_set) # 转换测试集\n",
    "\n",
    "# handle_unknown 和 handle_missing 被设定为 'value'\n",
    "# 在目标编码中，handle_unknown 和 handle_missing 仅接受 ‘error’, ‘return_nan’ 及 ‘value’ 设定\n",
    "# 两者的默认值均为 ‘value’, 即对未知类别或缺失值填充训练集的因变量平均值\n",
    "\n",
    "encoded_test # 编码后的变量数与原类别变量数一致\n",
    "\n",
    "# 因为在category_encoders中，其对前文所述的公式做了一些修改，故此处不会进一步验证结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.222328Z",
     "start_time": "2020-02-29T21:35:13.216373Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        Sex  Type\n",
       "0  0.500000   0.5\n",
       "1  0.333333   0.5\n",
       "2  0.500000   0.5\n",
       "3  0.333333   0.5\n",
       "4  0.333333   0.0"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "encoded_train # 训练集结果"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Weight of Evidence Encoder 证据权重编码"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "与上述方法类似，证据权重编码器也是根据类别变量与因变量的关系对分类变量进行编码。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "公式：  \n",
    "$WoE = X_k' = ln(\\frac{distribution\\_of\\_positive}{distribution\\_of\\_negative})$  \n",
    "$distribution\\_of\\_positive = \\frac{n^{+}}{y^{+}}$  \n",
    "$distribution\\_of\\_positive = \\frac{n^{-}}{y^{-}}$   \n",
    "\n",
    "以上是WoE的原始定义，但在category_encoders中，它还增加了正则项以应对过拟合。带正则项的$distribution\\_of\\_positive$, $distribution\\_of\\_negative$ 如下所示：  \n",
    "\n",
    "$distribution\\_of\\_positive = \\frac{n^{+} + regularization }{y^{+} + 2 * regularization }$  \n",
    "$distribution\\_of\\_positive = \\frac{n^{-} + regularization }{y^{-} + 2 * regularization }$ "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.229016Z",
     "start_time": "2020-02-29T21:35:13.223550Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "from category_encoders.woe import WOEEncoder\n",
    "# category_encoders 直接支持dataframe\n",
    "\n",
    "# 随机生成一些训练集\n",
    "train_set = pd.DataFrame(np.array([['male',10],['female', 20], ['male',10], \n",
    "                       ['female',20],['female',15]]),\n",
    "             columns = ['Sex','Type'])\n",
    "train_y = np.array([False, True, True, False, False])\n",
    "\n",
    "# 随机生成一些测试集, 并有意让其包含未在训练集出现过的类别与缺失值\n",
    "test_set = pd.DataFrame(np.array([['female',20],['male', 20], ['others',15], \n",
    "                       ['male',20],['female',40], ['male', 25]]),\n",
    "             columns = ['Sex','Type'])\n",
    "test_set.loc[4,'Type'] = np.nan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.236125Z",
     "start_time": "2020-02-29T21:35:13.230658Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>male</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>male</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>female</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Sex Type\n",
       "0    male   10\n",
       "1  female   20\n",
       "2    male   10\n",
       "3  female   20\n",
       "4  female   15"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_set # 原始训练集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.243045Z",
     "start_time": "2020-02-29T21:35:13.237455Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>others</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>male</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Sex Type\n",
       "0  female   20\n",
       "1    male   20\n",
       "2  others   15\n",
       "3    male   20\n",
       "4  female  NaN\n",
       "5    male   25"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_set # 原始测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.284147Z",
     "start_time": "2020-02-29T21:35:13.244501Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.182322</td>\n",
       "      <td>0.223144</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.223144</td>\n",
       "      <td>0.223144</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.223144</td>\n",
       "      <td>0.223144</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.182322</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.223144</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        Sex      Type\n",
       "0 -0.182322  0.223144\n",
       "1  0.223144  0.223144\n",
       "2  0.000000  0.000000\n",
       "3  0.223144  0.223144\n",
       "4 -0.182322  0.000000\n",
       "5  0.223144  0.000000"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "encoder = WOEEncoder(cols=['Sex','Type'], \n",
    "                     handle_unknown='value',  \n",
    "                     handle_missing='value').fit(train_set,train_y)  # 在训练集上训练\n",
    "encoded_train = encoder.transform(train_set) # 转换训练集\n",
    "encoded_test = encoder.transform(test_set) # 转换测试集\n",
    "\n",
    "# handle_unknown 和 handle_missing 被设定为 'value'\n",
    "# 在目标编码中，handle_unknown 和 handle_missing 仅接受 ‘error’, ‘return_nan’ 及 ‘value’ 设定\n",
    "# 两者的默认值均为 ‘value’, 即对未知类别或缺失值填充训练集的因变量平均值\n",
    "\n",
    "encoded_test # 编码后的变量数与原类别变量数一致"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.290454Z",
     "start_time": "2020-02-29T21:35:13.285778Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.22314355131420976"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 验证一下计算的结果，在测试集中，‘male’类别的编码值为 0.223144\n",
    "\n",
    "y = 5 # 训练集中一共有5个样本\n",
    "y_positive = 2 # 训练集中2个样本有正标签\n",
    "\n",
    "n = 2 # 训练集中有2个样本在Sex变量上有‘male’ 标签\n",
    "n_positive = 1 # 这两个样本中仅有一个有正标签\n",
    "\n",
    "regularization = 1.0 # 默认值\n",
    "\n",
    "dis_postive = (n_positive + regularization) / (y_positive + 2 * regularization)\n",
    "dis_negative = (n - n_positive + regularization) / (y - y_positive + 2 * regularization)\n",
    "male_encode = np.log(dis_postive / dis_negative)\n",
    "male_encode # return 0.22314355131420976，与要验证的值吻合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.297664Z",
     "start_time": "2020-02-29T21:35:13.291902Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.223144</td>\n",
       "      <td>0.223144</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.182322</td>\n",
       "      <td>0.223144</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.223144</td>\n",
       "      <td>0.223144</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.182322</td>\n",
       "      <td>0.223144</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.182322</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        Sex      Type\n",
       "0  0.223144  0.223144\n",
       "1 -0.182322  0.223144\n",
       "2  0.223144  0.223144\n",
       "3 -0.182322  0.223144\n",
       "4 -0.182322  0.000000"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "encoded_train # 训练集结果"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Leave One Out Encoder 留一法编码"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "留一法编码器通过组因变量均值对每个组进行编码。此处组指的是类别变量中的不同类别。留一法同时考虑了过拟合问题，训练集中的每一个样本的编码值是除去该样本后的组因变量均值。因此，在训练集中，其可以将处于相同组的每个样本编码为不同的值。  \n",
    "\n",
    "留一法以不同的方式对测试集进行编码。测试集中的每个样本均由训练集中的组均值编码，计算过程中没有考虑去除该样本。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "公式：  \n",
    "在训练集中: $X_i^k = \\frac{\\sum_{j\\neq i} (y_j * (x_j == k))}{\\sum_{j\\neq i} ( x_j == k)}$  \n",
    "在测试集中: $X_i^k = \\frac{\\sum_{j} (y_j * (x_j == k))}{\\sum_{j} ( x_j == k)}$  \n",
    "\n",
    "此处，若样本j拥有k标签，则($x_j == k$)返回1，否则返回0  \n",
    "$X_i^k$ 为样本i的标签为k情形下的编码值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.304767Z",
     "start_time": "2020-02-29T21:35:13.299017Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "from category_encoders.leave_one_out import LeaveOneOutEncoder\n",
    "# category_encoders 直接支持dataframe\n",
    "\n",
    "# 随机生成一些训练集\n",
    "train_set = pd.DataFrame(np.array([['male',10],['female', 20], ['male',10], \n",
    "                       ['female',20],['female',15]]),\n",
    "             columns = ['Sex','Type'])\n",
    "train_y = np.array([False, True, True, False, False])\n",
    "\n",
    "# 随机生成一些测试集, 并有意让其包含未在训练集出现过的类别与缺失值\n",
    "test_set = pd.DataFrame(np.array([['female',20],['male', 20], ['others',15], \n",
    "                       ['male',20],['female',40], ['male', 25]]),\n",
    "             columns = ['Sex','Type'])\n",
    "test_set.loc[4,'Type'] = np.nan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.311624Z",
     "start_time": "2020-02-29T21:35:13.306047Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>male</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>male</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>female</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Sex Type\n",
       "0    male   10\n",
       "1  female   20\n",
       "2    male   10\n",
       "3  female   20\n",
       "4  female   15"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_set # 原始训练集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.319318Z",
     "start_time": "2020-02-29T21:35:13.313222Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>others</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>male</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Sex Type\n",
       "0  female   20\n",
       "1    male   20\n",
       "2  others   15\n",
       "3    male   20\n",
       "4  female  NaN\n",
       "5    male   25"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_set # 原始测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.364673Z",
     "start_time": "2020-02-29T21:35:13.320755Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.400000</td>\n",
       "      <td>0.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        Sex  Type\n",
       "0  0.333333   0.5\n",
       "1  0.500000   0.5\n",
       "2  0.400000   0.4\n",
       "3  0.500000   0.5\n",
       "4  0.333333   0.4\n",
       "5  0.500000   0.4"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "encoder = LeaveOneOutEncoder(cols=['Sex','Type'], \n",
    "                             handle_unknown='value',  \n",
    "                             handle_missing='value').fit(train_set,train_y)  # 在训练集上训练\n",
    "encoded_train = encoder.transform(train_set) # 转换训练集\n",
    "encoded_test = encoder.transform(test_set) # 转换测试集\n",
    "\n",
    "# handle_unknown 和 handle_missing 被设定为 'value'\n",
    "# 在目标编码中，handle_unknown 和 handle_missing 仅接受 ‘error’, ‘return_nan’ 及 ‘value’ 设定\n",
    "# 两者的默认值均为 ‘value’, 即对未知类别或缺失值填充训练集的因变量平均值\n",
    "\n",
    "encoded_test # 编码后的变量数与原类别变量数一致\n",
    "# 结果可见，所有类别值都被编码为训练集中的类别因变量均值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.402080Z",
     "start_time": "2020-02-29T21:35:13.365965Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.5</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.5</td>\n",
       "      <td>0.4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Sex  Type\n",
       "0  1.0   1.0\n",
       "1  0.0   0.0\n",
       "2  0.0   0.0\n",
       "3  0.5   1.0\n",
       "4  0.5   0.4"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 训练集结果\n",
    "LeaveOneOutEncoder(cols=['Sex','Type'],\n",
    "                   handle_unknown='value',  \n",
    "                   handle_missing='value').fit_transform(train_set,train_y)\n",
    "\n",
    "# 进行小验算：\n",
    "# 对第一个样本而言，其在Sex变量上的标签为‘male’\n",
    "# 除去该样本后，‘male’标签样本的因变量平均值为1.0 （仅剩样本3有‘male’标签，且其有正的因变量标签）\n",
    "# 同理，对第三个同样有‘male’标签的样本，除去它后标签样本的因变量平均值变为了0.0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Catboost Encoder Catboost 编码"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "CatBoost是一个基于树的梯度提升模型。其在包含大量类别特征的数据集问题中具有出色的效果。该模型针对分类特征提出了一种基于“留一法编码器”的新编码系统。在使用Catboost编码器之前，必须先对训练数据随机排列，因为在Catboost中，编码是基于“时间”的概念，即数据集中观测值的顺序。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "公式：  \n",
    "训练集: $\\frac{\\sum_{j < i} (y_j * (x_j == k)) + a * Prior}{\\sum_{j<i} (x_j == k) + a}$  \n",
    "测试集: $X_i^k = \\frac{\\sum_{j} (y_j * (x_j == k)) + a * Prior}{\\sum_{j} ( x_j == k) + a}$  \n",
    "\n",
    "其中，若样本j拥有k标签，则($x_j == k$)返回1，否则返回0  \n",
    "$X_i^k$ 为样本i的标签为k情形下的编码值  \n",
    "Prior 为因变量的先验概率/期望值  \n",
    "a为正则化系数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.409020Z",
     "start_time": "2020-02-29T21:35:13.403513Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "from category_encoders.cat_boost import CatBoostEncoder\n",
    "# category_encoders 直接支持dataframe\n",
    "\n",
    "# 随机生成一些训练集\n",
    "train_set = pd.DataFrame(np.array([['male',10],['female', 20], ['male',10], \n",
    "                       ['female',20],['female',15]]),\n",
    "             columns = ['Sex','Type'])\n",
    "train_y = np.array([False, True, True, False, False])\n",
    "\n",
    "# 随机生成一些测试集, 并有意让其包含未在训练集出现过的类别与缺失值\n",
    "test_set = pd.DataFrame(np.array([['female',20],['male', 20], ['others',15], \n",
    "                       ['male',20],['female',40], ['male', 25]]),\n",
    "             columns = ['Sex','Type'])\n",
    "test_set.loc[4,'Type'] = np.nan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.416137Z",
     "start_time": "2020-02-29T21:35:13.410456Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>male</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>male</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>female</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Sex Type\n",
       "0    male   10\n",
       "1  female   20\n",
       "2    male   10\n",
       "3  female   20\n",
       "4  female   15"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_set # 原始训练集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.423085Z",
     "start_time": "2020-02-29T21:35:13.417502Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>female</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>others</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>female</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>male</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Sex Type\n",
       "0  female   20\n",
       "1    male   20\n",
       "2  others   15\n",
       "3    male   20\n",
       "4  female  NaN\n",
       "5    male   25"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_set # 原始测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.473455Z",
     "start_time": "2020-02-29T21:35:13.424437Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.350000</td>\n",
       "      <td>0.466667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.466667</td>\n",
       "      <td>0.466667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.400000</td>\n",
       "      <td>0.400000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.466667</td>\n",
       "      <td>0.466667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.350000</td>\n",
       "      <td>0.400000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.466667</td>\n",
       "      <td>0.400000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        Sex      Type\n",
       "0  0.350000  0.466667\n",
       "1  0.466667  0.466667\n",
       "2  0.400000  0.400000\n",
       "3  0.466667  0.466667\n",
       "4  0.350000  0.400000\n",
       "5  0.466667  0.400000"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 事实上，在使用Catboost编码前，我们本应先打乱数据顺序\n",
    "# 但由于我们的数据本身已经是随机生成的，故无需打乱\n",
    "\n",
    "encoder = CatBoostEncoder(cols=['Sex','Type'], \n",
    "                          handle_unknown='value',  \n",
    "                          handle_missing='value').fit(train_set,train_y)   # 在训练集上训练\n",
    "encoded_train = encoder.transform(train_set) # 转换训练集\n",
    "encoded_test = encoder.transform(test_set) # 转换测试集\n",
    "\n",
    "# handle_unknown 和 handle_missing 被设定为 'value'\n",
    "# 在目标编码中，handle_unknown 和 handle_missing 仅接受 ‘error’, ‘return_nan’ 及 ‘value’ 设定\n",
    "# 两者的默认值均为 ‘value’, 即对未知类别或缺失值填充训练集的因变量平均值\n",
    "\n",
    "encoded_test # 编码后的变量数与原类别变量数一致"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.478714Z",
     "start_time": "2020-02-29T21:35:13.474781Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.4666666666666666"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 验证一下计算的结果，在测试集中，‘male’类别的编码值为 0.466667\n",
    "\n",
    "Prior = train_y.mean() # 先验概率\n",
    "n = 2 # 在训练集中，两个样本在Sex变量上具有‘male’标签\n",
    "n_positive = 1 # 这两个样本中，仅有一个拥有正标签\n",
    "a = 1 # 正则化系数， 默认值为1\n",
    "\n",
    "encoded_male = (n_positive + a * prior) / (n + a) \n",
    "encoded_male # return 0.4666666666666666，与要验证的值吻合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.526865Z",
     "start_time": "2020-02-29T21:35:13.480065Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.400000</td>\n",
       "      <td>0.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.400000</td>\n",
       "      <td>0.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.200000</td>\n",
       "      <td>0.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.700000</td>\n",
       "      <td>0.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.466667</td>\n",
       "      <td>0.4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        Sex  Type\n",
       "0  0.400000   0.4\n",
       "1  0.400000   0.4\n",
       "2  0.200000   0.2\n",
       "3  0.700000   0.7\n",
       "4  0.466667   0.4"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 验证一下训练集的结果\n",
    "CatBoostEncoder(cols=['Sex','Type'],\n",
    "                handle_unknown='value',  \n",
    "                handle_missing='value').fit_transform(train_set,train_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.532652Z",
     "start_time": "2020-02-29T21:35:13.528136Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.2"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 训练集中第三个样本在Sex这一变量上有‘male’标签，其编码值为0.2\n",
    "Prior = train_y.mean() # 先验概率\n",
    "n = 1 # 在第三个样本前仅有一个样本有‘male’标签\n",
    "n_positive = 0 # 这仅有的一个样本没有正标签\n",
    "a = 1 # 正则化系数\n",
    "\n",
    "encoded_male = (n_positive + a * Prior) / (n + a)\n",
    "encoded_male # return 0.2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Time Series Variables 时间序列变量"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "有时我们的数据集或者所研究的问题可能与时间有关。在这种情况下，我们可以利用python中的Featuretools包来实现自动化特征工程。具体来说，我们可以跨时间“积累”信息。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.802700Z",
     "start_time": "2020-02-29T21:35:13.534114Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Customer ID</th>\n",
       "      <th>Seconds Stay</th>\n",
       "      <th>Item Purchase</th>\n",
       "      <th>Time</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>Target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>001</td>\n",
       "      <td>100</td>\n",
       "      <td>Apple</td>\n",
       "      <td>2020-01-01</td>\n",
       "      <td>male</td>\n",
       "      <td>35</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>002</td>\n",
       "      <td>20</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2020-01-01</td>\n",
       "      <td>female</td>\n",
       "      <td>30</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>003</td>\n",
       "      <td>50</td>\n",
       "      <td>Orange</td>\n",
       "      <td>2020-01-01</td>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>001</td>\n",
       "      <td>13</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2020-01-03</td>\n",
       "      <td>male</td>\n",
       "      <td>35</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>002</td>\n",
       "      <td>30</td>\n",
       "      <td>Apple</td>\n",
       "      <td>2020-01-03</td>\n",
       "      <td>female</td>\n",
       "      <td>30</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>001</td>\n",
       "      <td>90</td>\n",
       "      <td>Orange</td>\n",
       "      <td>2020-01-06</td>\n",
       "      <td>male</td>\n",
       "      <td>35</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>003</td>\n",
       "      <td>5</td>\n",
       "      <td>Orange</td>\n",
       "      <td>2020-01-07</td>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Customer ID  Seconds Stay Item Purchase       Time     Sex  Age  Target\n",
       "0         001           100         Apple 2020-01-01    male   35       1\n",
       "1         002            20           NaN 2020-01-01  female   30       0\n",
       "2         003            50        Orange 2020-01-01    male   20       1\n",
       "3         001            13           NaN 2020-01-03    male   35       0\n",
       "4         002            30         Apple 2020-01-03  female   30       1\n",
       "5         001            90        Orange 2020-01-06    male   35       1\n",
       "6         003             5        Orange 2020-01-07    male   20       1"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 合成一些样本数据，记录用户在每一次登陆网站后的行为，比如用户的停留时间，购买的产品等\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import featuretools as ft\n",
    "import datetime\n",
    "\n",
    "raw_dataset = np.array([['001',100, 'Apple', '2020/01/01', 'male', 35, 1],\n",
    "                        ['002',20, np.nan, '2020/01/01', 'female', 30, 0],\n",
    "                        ['003',50, 'Orange','2020/01/01', 'male', 20, 1],\n",
    "                        ['001', 13, np.nan, '2020/01/03', 'male', 35, 0],\n",
    "                        ['002', 30, 'Apple', '2020/01/03','female', 30, 1], \n",
    "                        ['001', 90, 'Orange', '2020/01/06', 'male', 35, 1], \n",
    "                        ['003', 5, 'Orange', '2020/01/07', 'male', 20, 1]])\n",
    "\n",
    "dataset = pd.DataFrame(raw_dataset, columns = ['Customer ID', 'Seconds Stay', 'Item Purchase',\n",
    "                                               'Time', 'Sex', 'Age', 'Target'])\n",
    "dataset['Seconds Stay'] = dataset['Seconds Stay'].astype(int)\n",
    "dataset['Target'] = dataset['Target'].astype(int)\n",
    "dataset['Age'] = dataset['Age'].astype(int)\n",
    "dataset['Time'] = pd.to_datetime(dataset['Time'])\n",
    "dataset['Item Purchase'] = dataset['Item Purchase'].replace(\"nan\", np.nan)\n",
    "\n",
    "dataset # 在Item Purchase中，NaN即该客户没有购买"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Time Series Categorical Features 时间序列类别变量"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "一个可能的数据科学问题是：在上述的合成数据中，我们如何预测客户的购买行为。具体而言，我们可能想要预测客户002在2020-01-08登陆的时候是否会购买。  \n",
    "\n",
    "上述数据中的类别变量有Item Purchase。基于这个类别变量我们可以进行特征工程并合成以下新变量：每一次登陆前他有过几次购买行为，每一次登陆前他最喜欢的产品是什么，每一次登陆前他购买过多少独特的商品等等。  \n",
    "\n",
    "而这一些变量，都可以通过Featuretools包简单实现。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Featuretools包提供了以下一些有用的特征变换：\n",
    "\n",
    "- COUNT：在给定时间之前的变量计数值，不包括缺失值\n",
    "- Mode: 在给定时间之前的变量众数\n",
    "- NumUnique：在给定时间之前的唯一值计数，不包括缺失值\n",
    "- Entropy: 在给定时间之前类别变量的熵\n",
    "- First: 在给定时间之前变量出现的第一个值\n",
    "- Last: 在给定时间之前出现的变量最后一个值  \n",
    "\n",
    "Featuretools包还提供了很多其他的变换，具体可见[官方网站](https://docs.featuretools.com/en/stable/api_reference.html#aggregation-primitives)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Time Series Continuous Features 时间序列连续变量"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "与前述问题一致，我们可能想要预测客户002在2020-01-08登陆的时候是否会购买。  \n",
    "\n",
    "上述数据中的连续变量有Seconds Stay，即客户每次登陆后停留了多久。基于这个连续变量我们可以进行特征工程并合成以下新变量：每一次登陆前他的平均停留时间，每一次登陆前他的停留时间的标准差，每一次登陆前他的停留时间的滑动平均等。  \n",
    "\n",
    "而这一些变量，同样可以通过Featuretools包简单实现。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Featuretools包提供了以下一些有用的特征变换：  \n",
    "\n",
    "- COUNT: 在给定时间之前的变量计数值，不包括缺失值\n",
    "- First: 在给定时间之前变量出现的第一个值\n",
    "- Last: 在给定时间之前变量出现的最后一个值\n",
    "- Mean: 在给定时间之前该变量的平均值，不包括缺失值\n",
    "- Sum: 在给定时间之前该变量的求和，不包括缺失值\n",
    "- Min: 在给定时间之前该变量的最小值，不包括缺失值\n",
    "- Max: 在给定时间之前该变量的最大值，不包括缺失值\n",
    "- Std: 在给定时间之前该变量的标准差，不包括缺失值\n",
    "- Median: 在给定时间之前该变量的中位数，不包括缺失值\n",
    "- Trend: 在给定时间之前该变量的趋势，即线性斜率  \n",
    "\n",
    "Featuretools包还提供了很多其他的变换，具体可见[官方网站](https://docs.featuretools.com/en/stable/api_reference.html#aggregation-primitives)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Implementation 代码实现"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.812747Z",
     "start_time": "2020-02-29T21:35:13.804102Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Customer ID</th>\n",
       "      <th>Seconds Stay</th>\n",
       "      <th>Item Purchase</th>\n",
       "      <th>Time</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>Target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>001</td>\n",
       "      <td>100</td>\n",
       "      <td>Apple</td>\n",
       "      <td>2020-01-01</td>\n",
       "      <td>male</td>\n",
       "      <td>35</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>002</td>\n",
       "      <td>20</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2020-01-01</td>\n",
       "      <td>female</td>\n",
       "      <td>30</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>003</td>\n",
       "      <td>50</td>\n",
       "      <td>Orange</td>\n",
       "      <td>2020-01-01</td>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>001</td>\n",
       "      <td>13</td>\n",
       "      <td>NaN</td>\n",
       "      <td>2020-01-03</td>\n",
       "      <td>male</td>\n",
       "      <td>35</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>002</td>\n",
       "      <td>30</td>\n",
       "      <td>Apple</td>\n",
       "      <td>2020-01-03</td>\n",
       "      <td>female</td>\n",
       "      <td>30</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>001</td>\n",
       "      <td>90</td>\n",
       "      <td>Orange</td>\n",
       "      <td>2020-01-06</td>\n",
       "      <td>male</td>\n",
       "      <td>35</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>003</td>\n",
       "      <td>5</td>\n",
       "      <td>Orange</td>\n",
       "      <td>2020-01-07</td>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Customer ID  Seconds Stay Item Purchase       Time     Sex  Age  Target\n",
       "0         001           100         Apple 2020-01-01    male   35       1\n",
       "1         002            20           NaN 2020-01-01  female   30       0\n",
       "2         003            50        Orange 2020-01-01    male   20       1\n",
       "3         001            13           NaN 2020-01-03    male   35       0\n",
       "4         002            30         Apple 2020-01-03  female   30       1\n",
       "5         001            90        Orange 2020-01-06    male   35       1\n",
       "6         003             5        Orange 2020-01-07    male   20       1"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 原始数据集\n",
    "dataset"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Create EntitySet 生成实体集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.823958Z",
     "start_time": "2020-02-29T21:35:13.814344Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Customer ID</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>001</td>\n",
       "      <td>male</td>\n",
       "      <td>35</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>002</td>\n",
       "      <td>female</td>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>003</td>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Customer ID     Sex  Age\n",
       "0         001    male   35\n",
       "1         002  female   30\n",
       "2         003    male   20"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 首先，我们需要创建EntitySet即实体集\n",
    "# 它是数据集中实体的集合，包含实体之间的关系\n",
    "# 它们的创建能帮助Featuretool了解数据的结构，从而实现自动时间序列特征工程\n",
    "\n",
    "es = ft.EntitySet(id=\"customer_data\") # 首先生成一个空白的实体集\n",
    "\n",
    "# 数据集中一个实体即每一个客户，我们有客户层面的数据，例如客户的性别，客户的年龄\n",
    "df_customer = dataset[['Customer ID', 'Sex', 'Age']].drop_duplicates()\n",
    "df_customer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.835234Z",
     "start_time": "2020-02-29T21:35:13.825238Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Entity: Customer\n",
       "  Variables:\n",
       "    Customer ID (dtype: index)\n",
       "    Sex (dtype: categorical)\n",
       "    Age (dtype: numeric)\n",
       "  Shape:\n",
       "    (Rows: 3, Columns: 3)"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 现在我们将这个实体加入到实体集中\n",
    "es = es.entity_from_dataframe(entity_id=\"Customer\",\n",
    "                              dataframe=df_customer,\n",
    "                              index= 'Customer ID') \n",
    "# 在这个实体中，Customer ID是将每一个顾客区别开的索引\n",
    "\n",
    "es['Customer']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.851121Z",
     "start_time": "2020-02-29T21:35:13.836608Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Entity: Transaction\n",
       "  Variables:\n",
       "    index (dtype: index)\n",
       "    Customer ID (dtype: categorical)\n",
       "    Time (dtype: datetime_time_index)\n",
       "    Item Purchase (dtype: categorical)\n",
       "    Seconds Stay (dtype: numeric)\n",
       "    Target (dtype: numeric)\n",
       "  Shape:\n",
       "    (Rows: 7, Columns: 6)"
      ]
     },
     "execution_count": 93,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 第二个实体即每一次发生的交易，我们也有交易层面的数据，即每一次的停留时间，购买的产品名称\n",
    "es = es.entity_from_dataframe(entity_id=\"Transaction\",\n",
    "                              dataframe=dataset[[\"Customer ID\",\"Seconds Stay\", \n",
    "                                                 \"Item Purchase\", \n",
    "                                                 \"Time\",\"Target\"]].reset_index(),\n",
    "                              index=\"index\", \n",
    "                              # 在这个实体中，索引为‘index’\n",
    "                              time_index=\"Time\", # 时间索引为‘Time’\n",
    "                              variable_types={\"Item Purchase\": ft.variable_types.Categorical, \n",
    "                                              \"Seconds Stay\": ft.variable_types.Numeric,\n",
    "                                              \"Target\": ft.variable_types.Numeric})\n",
    "es['Transaction']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.857365Z",
     "start_time": "2020-02-29T21:35:13.852435Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Entityset: customer_data\n",
       "  Entities:\n",
       "    Customer [Rows: 3, Columns: 3]\n",
       "    Transaction [Rows: 7, Columns: 6]\n",
       "  Relationships:\n",
       "    Transaction.Customer ID -> Customer.Customer ID"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 现在，我们添加实体之间的关系\n",
    "relationship = ft.Relationship(es[\"Customer\"][\"Customer ID\"],\n",
    "                               es[\"Transaction\"][\"Customer ID\"])\n",
    "# 每一个用户都有一些交易与之关联\n",
    "# 故我们称用户为母实体\n",
    "# 每一次交易为子实体\n",
    "\n",
    "es = es.add_relationship(relationship)\n",
    "es"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Set up cut-time 设置时间截断"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "关于时间截断的更多信息可以在Featuretools的官网网站中获得：\n",
    "https://docs.featuretools.com/en/stable/automated_feature_engineering/handling_time.html"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.866309Z",
     "start_time": "2020-02-29T21:35:13.858598Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Customer ID</th>\n",
       "      <th>Time</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>001</td>\n",
       "      <td>2020-01-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>002</td>\n",
       "      <td>2020-01-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>003</td>\n",
       "      <td>2020-01-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>001</td>\n",
       "      <td>2020-01-03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>002</td>\n",
       "      <td>2020-01-03</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>001</td>\n",
       "      <td>2020-01-06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>003</td>\n",
       "      <td>2020-01-07</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Customer ID       Time\n",
       "0         001 2020-01-01\n",
       "1         002 2020-01-01\n",
       "2         003 2020-01-01\n",
       "3         001 2020-01-03\n",
       "4         002 2020-01-03\n",
       "5         001 2020-01-06\n",
       "6         003 2020-01-07"
      ]
     },
     "execution_count": 95,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 创建时间切割\n",
    "# 通常在时间序列的数据集中\n",
    "# 其可能包含很多时间节点\n",
    "# 如果处理不慎就可能导致未来的信息泄漏\n",
    "\n",
    "# 故我们需要设置Cut-time 时间切割\n",
    "# 即让Featuretool明白其需要考虑可能的信息泄漏问题\n",
    "# 我们可以在Featuretools中加入一个用于指示对应切割时间的数据集\n",
    "# 其指定了每一行可使用信息的最后时间点\n",
    "# 即对每一行数据，在进行对应的特征工程时，我们仅仅会考虑这一行时间切割点之前的信息\n",
    "\n",
    "ct = dataset[['Customer ID','Time']].copy() # the cut-off dataframe\n",
    "ct"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:13.875640Z",
     "start_time": "2020-02-29T21:35:13.867653Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Customer ID</th>\n",
       "      <th>Time</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>001</td>\n",
       "      <td>2019-12-31 23:59:59</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>002</td>\n",
       "      <td>2019-12-31 23:59:59</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>003</td>\n",
       "      <td>2019-12-31 23:59:59</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>001</td>\n",
       "      <td>2020-01-02 23:59:59</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>002</td>\n",
       "      <td>2020-01-02 23:59:59</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>001</td>\n",
       "      <td>2020-01-05 23:59:59</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>003</td>\n",
       "      <td>2020-01-06 23:59:59</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Customer ID                Time\n",
       "0         001 2019-12-31 23:59:59\n",
       "1         002 2019-12-31 23:59:59\n",
       "2         003 2019-12-31 23:59:59\n",
       "3         001 2020-01-02 23:59:59\n",
       "4         002 2020-01-02 23:59:59\n",
       "5         001 2020-01-05 23:59:59\n",
       "6         003 2020-01-06 23:59:59"
      ]
     },
     "execution_count": 96,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 但是在我们的这一问题中\n",
    "# 每一行的截止时间应在交易发生时间之前\n",
    "# 此次交易的信息是不应该被涵盖在特征工程中\n",
    "# 因为我们没有当前行信息来预测当前行的购买\n",
    "# 例如，直到顾客完成购买后，我们才知道他购买了哪种产品\n",
    "\n",
    "ct['Time'] = ct['Time'] + datetime.timedelta(seconds = -1) \n",
    "# 将时间截断设置为每一次登陆时间的前1秒\n",
    "\n",
    "ct"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Auto Feature Engineering 自动特征工程"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "一种使用Featuretools的策略是让其自动生成所有可能的特征。这种策略中我们无需指定我们要为每个原始特征进行的转换。随后我们可以从这些自动生成的特征中筛选我们想要的特征。但这种策略往往会比较占用内存和运行时间。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:14.140796Z",
     "start_time": "2020-02-29T21:35:13.877054Z"
    }
   },
   "outputs": [],
   "source": [
    "# 开始自动特征工程，我们无需指定我们要为每个原始特征进行的转换\n",
    "fm, features = ft.dfs(entityset=es,\n",
    "                      target_entity='Customer', \n",
    "                      # 我们想要在每一个客户层面累计信息\n",
    "                      # 因为我们想要预测的是未来每个客户的可能购买行为\n",
    "                      max_depth=2, # 设置深度为 2, 即交叉项最后包含两种原始变量\n",
    "                      cutoff_time=ct,\n",
    "                      cutoff_time_in_index=True) \n",
    "\n",
    "# 我们甚至可以指定训练窗口来实现滑动平均的效果，此处不进行展示"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:14.145656Z",
     "start_time": "2020-02-29T21:35:14.142077Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['Sex', 'Age', 'SUM(Transaction.Target)',\n",
       "       'SUM(Transaction.Seconds Stay)', 'STD(Transaction.Target)',\n",
       "       'STD(Transaction.Seconds Stay)', 'MAX(Transaction.Target)',\n",
       "       'MAX(Transaction.Seconds Stay)', 'SKEW(Transaction.Target)',\n",
       "       'SKEW(Transaction.Seconds Stay)', 'MIN(Transaction.Target)',\n",
       "       'MIN(Transaction.Seconds Stay)', 'MEAN(Transaction.Target)',\n",
       "       'MEAN(Transaction.Seconds Stay)', 'COUNT(Transaction)',\n",
       "       'NUM_UNIQUE(Transaction.Item Purchase)',\n",
       "       'MODE(Transaction.Item Purchase)', 'NUM_UNIQUE(Transaction.YEAR(Time))',\n",
       "       'NUM_UNIQUE(Transaction.WEEKDAY(Time))',\n",
       "       'NUM_UNIQUE(Transaction.MONTH(Time))',\n",
       "       'NUM_UNIQUE(Transaction.DAY(Time))', 'MODE(Transaction.YEAR(Time))',\n",
       "       'MODE(Transaction.WEEKDAY(Time))', 'MODE(Transaction.MONTH(Time))',\n",
       "       'MODE(Transaction.DAY(Time))'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fm; # 特征工程后的结果\n",
    "fm.columns "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:14.150555Z",
     "start_time": "2020-02-29T21:35:14.147394Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<Feature: Sex>,\n",
       " <Feature: Age>,\n",
       " <Feature: SUM(Transaction.Target)>,\n",
       " <Feature: SUM(Transaction.Seconds Stay)>,\n",
       " <Feature: STD(Transaction.Target)>,\n",
       " <Feature: STD(Transaction.Seconds Stay)>,\n",
       " <Feature: MAX(Transaction.Target)>,\n",
       " <Feature: MAX(Transaction.Seconds Stay)>,\n",
       " <Feature: SKEW(Transaction.Target)>,\n",
       " <Feature: SKEW(Transaction.Seconds Stay)>,\n",
       " <Feature: MIN(Transaction.Target)>,\n",
       " <Feature: MIN(Transaction.Seconds Stay)>,\n",
       " <Feature: MEAN(Transaction.Target)>,\n",
       " <Feature: MEAN(Transaction.Seconds Stay)>,\n",
       " <Feature: COUNT(Transaction)>,\n",
       " <Feature: NUM_UNIQUE(Transaction.Item Purchase)>,\n",
       " <Feature: MODE(Transaction.Item Purchase)>,\n",
       " <Feature: NUM_UNIQUE(Transaction.YEAR(Time))>,\n",
       " <Feature: NUM_UNIQUE(Transaction.WEEKDAY(Time))>,\n",
       " <Feature: NUM_UNIQUE(Transaction.MONTH(Time))>,\n",
       " <Feature: NUM_UNIQUE(Transaction.DAY(Time))>,\n",
       " <Feature: MODE(Transaction.YEAR(Time))>,\n",
       " <Feature: MODE(Transaction.WEEKDAY(Time))>,\n",
       " <Feature: MODE(Transaction.MONTH(Time))>,\n",
       " <Feature: MODE(Transaction.DAY(Time))>]"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "features\n",
    "# 特征工程生成的新变量名称与对应的合成方式\n",
    "# 自动功能工程可能会生成一些毫无意义的变量\n",
    "# 这需要我们的人工筛选"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "另一种策略即指定每一个原始变量我们需要什么对应的变换。\n",
    "在这种策略下，我们可以更好地控制特征工程的结果并节省时间与内存。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:14.155524Z",
     "start_time": "2020-02-29T21:35:14.151841Z"
    }
   },
   "outputs": [],
   "source": [
    "from featuretools.primitives import TimeSinceLast\n",
    "# import TimeSinceLast\n",
    "# 这样我们可以控制时间维度的单位\n",
    "\n",
    "operation_dict = {(\"count\", TimeSinceLast(unit = \"hours\")): {\"include_variables\": {\"Transaction\": [\"index\"]}},\n",
    "                  (\"entropy\", \n",
    "                   \"num_unique\",\n",
    "                   \"mode\"): {\"include_variables\": {\"Transaction\": [\"Item Purchase\"]}},\n",
    "                  (\"mean\", \n",
    "                   \"max\",\n",
    "                   \"median\",\n",
    "                   \"skew\",\n",
    "                   \"std\"): {\"include_variables\": {\"Transaction\": [\"Seconds Stay\",\"Target\"]}},\n",
    "                   \"last\": {\"include_variables\": {\"Transaction\": [\"Item Purchase\",\"Seconds Stay\",\n",
    "                                                                  \"Target\"]}}\n",
    "                 }\n",
    "\n",
    "# 新增一个计数变换来显示每次交易之前共有多少次登陆次数\n",
    "# 新增一个TimeSinceLast变换，以显示此次登陆距离上一次登陆的时间间隔\n",
    "# 新增对类别变量Item Purchase的熵，唯一值计数，众数及最近一次登陆购买的产品的统计\n",
    "# 新增数值变量Seconds Stay 及目标变量（滞后项）的均值，最大值，中位数，偏度，标准差和最近值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:14.343092Z",
     "start_time": "2020-02-29T21:35:14.157084Z"
    }
   },
   "outputs": [],
   "source": [
    "fm, features = ft.dfs(entityset=es,\n",
    "                      target_entity='Customer',\n",
    "                      max_depth=2,\n",
    "                      cutoff_time=ct,\n",
    "                      cutoff_time_in_index=True, \n",
    "                      agg_primitives = ['count','entropy', 'num_unique','mode','last',\n",
    "                                        'mean','max','median','skew','std',\n",
    "                                        TimeSinceLast(unit = \"hours\")],\n",
    "                      # 为简单起见，我们不包含transform primative\n",
    "                      # 即将实体中的一个或多个变量作为输入\n",
    "                      # 并为该实体输出一个新变量的变换\n",
    "                      \n",
    "                      # aggregation primitive & transform primitive的区别可见：\n",
    "                      # https://docs.featuretools.com/en/latest/automated_feature_engineering/primitives.html\n",
    "                      \n",
    "                      primitive_options= operation_dict # 指明对每一个原始变量我们想要的变换\n",
    "                      )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:14.348075Z",
     "start_time": "2020-02-29T21:35:14.344545Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<Feature: Sex>,\n",
       " <Feature: Age>,\n",
       " <Feature: COUNT(Transaction)>,\n",
       " <Feature: ENTROPY(Transaction.Item Purchase)>,\n",
       " <Feature: NUM_UNIQUE(Transaction.Item Purchase)>,\n",
       " <Feature: MODE(Transaction.Item Purchase)>,\n",
       " <Feature: LAST(Transaction.Target)>,\n",
       " <Feature: LAST(Transaction.Item Purchase)>,\n",
       " <Feature: LAST(Transaction.Seconds Stay)>,\n",
       " <Feature: MEAN(Transaction.Target)>,\n",
       " <Feature: MEAN(Transaction.Seconds Stay)>,\n",
       " <Feature: MAX(Transaction.Target)>,\n",
       " <Feature: MAX(Transaction.Seconds Stay)>,\n",
       " <Feature: MEDIAN(Transaction.Target)>,\n",
       " <Feature: MEDIAN(Transaction.Seconds Stay)>,\n",
       " <Feature: SKEW(Transaction.Target)>,\n",
       " <Feature: SKEW(Transaction.Seconds Stay)>,\n",
       " <Feature: STD(Transaction.Target)>,\n",
       " <Feature: STD(Transaction.Seconds Stay)>,\n",
       " <Feature: TIME_SINCE_LAST(Transaction.Time, unit=hours)>]"
      ]
     },
     "execution_count": 102,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "features # 新变量名称及对应的变换"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-02-29T21:35:14.369994Z",
     "start_time": "2020-02-29T21:35:14.349555Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>COUNT(Transaction)</th>\n",
       "      <th>ENTROPY(Transaction.Item Purchase)</th>\n",
       "      <th>NUM_UNIQUE(Transaction.Item Purchase)</th>\n",
       "      <th>MODE(Transaction.Item Purchase)</th>\n",
       "      <th>LAST(Transaction.Target)</th>\n",
       "      <th>LAST(Transaction.Item Purchase)</th>\n",
       "      <th>LAST(Transaction.Seconds Stay)</th>\n",
       "      <th>MEAN(Transaction.Target)</th>\n",
       "      <th>MEAN(Transaction.Seconds Stay)</th>\n",
       "      <th>MAX(Transaction.Target)</th>\n",
       "      <th>MAX(Transaction.Seconds Stay)</th>\n",
       "      <th>MEDIAN(Transaction.Target)</th>\n",
       "      <th>MEDIAN(Transaction.Seconds Stay)</th>\n",
       "      <th>SKEW(Transaction.Target)</th>\n",
       "      <th>SKEW(Transaction.Seconds Stay)</th>\n",
       "      <th>STD(Transaction.Target)</th>\n",
       "      <th>STD(Transaction.Seconds Stay)</th>\n",
       "      <th>TIME_SINCE_LAST(Transaction.Time, unit=hours)</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Customer ID</th>\n",
       "      <th>time</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>001</th>\n",
       "      <th>2019-12-31 23:59:59</th>\n",
       "      <td>male</td>\n",
       "      <td>35</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>002</th>\n",
       "      <th>2019-12-31 23:59:59</th>\n",
       "      <td>female</td>\n",
       "      <td>30</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>003</th>\n",
       "      <th>2019-12-31 23:59:59</th>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>001</th>\n",
       "      <th>2020-01-02 23:59:59</th>\n",
       "      <td>male</td>\n",
       "      <td>35</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.0</td>\n",
       "      <td>Apple</td>\n",
       "      <td>1.0</td>\n",
       "      <td>Apple</td>\n",
       "      <td>100.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>47.999722</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>002</th>\n",
       "      <th>2020-01-02 23:59:59</th>\n",
       "      <td>female</td>\n",
       "      <td>30</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>20.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>47.999722</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>001</th>\n",
       "      <th>2020-01-05 23:59:59</th>\n",
       "      <td>male</td>\n",
       "      <td>35</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.693147</td>\n",
       "      <td>1.0</td>\n",
       "      <td>Apple</td>\n",
       "      <td>0.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>13.0</td>\n",
       "      <td>0.5</td>\n",
       "      <td>56.5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>100.0</td>\n",
       "      <td>0.5</td>\n",
       "      <td>56.5</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.707107</td>\n",
       "      <td>61.51829</td>\n",
       "      <td>71.999722</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>003</th>\n",
       "      <th>2020-01-06 23:59:59</th>\n",
       "      <td>male</td>\n",
       "      <td>20</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.0</td>\n",
       "      <td>Orange</td>\n",
       "      <td>1.0</td>\n",
       "      <td>Orange</td>\n",
       "      <td>50.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>50.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>50.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>50.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>143.999722</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                    Sex  Age  COUNT(Transaction)  \\\n",
       "Customer ID time                                                   \n",
       "001         2019-12-31 23:59:59    male   35                 0.0   \n",
       "002         2019-12-31 23:59:59  female   30                 0.0   \n",
       "003         2019-12-31 23:59:59    male   20                 0.0   \n",
       "001         2020-01-02 23:59:59    male   35                 1.0   \n",
       "002         2020-01-02 23:59:59  female   30                 1.0   \n",
       "001         2020-01-05 23:59:59    male   35                 2.0   \n",
       "003         2020-01-06 23:59:59    male   20                 1.0   \n",
       "\n",
       "                                 ENTROPY(Transaction.Item Purchase)  \\\n",
       "Customer ID time                                                      \n",
       "001         2019-12-31 23:59:59                                 NaN   \n",
       "002         2019-12-31 23:59:59                                 NaN   \n",
       "003         2019-12-31 23:59:59                                 NaN   \n",
       "001         2020-01-02 23:59:59                            0.000000   \n",
       "002         2020-01-02 23:59:59                            0.000000   \n",
       "001         2020-01-05 23:59:59                            0.693147   \n",
       "003         2020-01-06 23:59:59                            0.000000   \n",
       "\n",
       "                                 NUM_UNIQUE(Transaction.Item Purchase)  \\\n",
       "Customer ID time                                                         \n",
       "001         2019-12-31 23:59:59                                    NaN   \n",
       "002         2019-12-31 23:59:59                                    NaN   \n",
       "003         2019-12-31 23:59:59                                    NaN   \n",
       "001         2020-01-02 23:59:59                                    1.0   \n",
       "002         2020-01-02 23:59:59                                    0.0   \n",
       "001         2020-01-05 23:59:59                                    1.0   \n",
       "003         2020-01-06 23:59:59                                    1.0   \n",
       "\n",
       "                                MODE(Transaction.Item Purchase)  \\\n",
       "Customer ID time                                                  \n",
       "001         2019-12-31 23:59:59                             NaN   \n",
       "002         2019-12-31 23:59:59                             NaN   \n",
       "003         2019-12-31 23:59:59                             NaN   \n",
       "001         2020-01-02 23:59:59                           Apple   \n",
       "002         2020-01-02 23:59:59                             NaN   \n",
       "001         2020-01-05 23:59:59                           Apple   \n",
       "003         2020-01-06 23:59:59                          Orange   \n",
       "\n",
       "                                 LAST(Transaction.Target)  \\\n",
       "Customer ID time                                            \n",
       "001         2019-12-31 23:59:59                       NaN   \n",
       "002         2019-12-31 23:59:59                       NaN   \n",
       "003         2019-12-31 23:59:59                       NaN   \n",
       "001         2020-01-02 23:59:59                       1.0   \n",
       "002         2020-01-02 23:59:59                       0.0   \n",
       "001         2020-01-05 23:59:59                       0.0   \n",
       "003         2020-01-06 23:59:59                       1.0   \n",
       "\n",
       "                                LAST(Transaction.Item Purchase)  \\\n",
       "Customer ID time                                                  \n",
       "001         2019-12-31 23:59:59                             NaN   \n",
       "002         2019-12-31 23:59:59                             NaN   \n",
       "003         2019-12-31 23:59:59                             NaN   \n",
       "001         2020-01-02 23:59:59                           Apple   \n",
       "002         2020-01-02 23:59:59                             NaN   \n",
       "001         2020-01-05 23:59:59                             NaN   \n",
       "003         2020-01-06 23:59:59                          Orange   \n",
       "\n",
       "                                 LAST(Transaction.Seconds Stay)  \\\n",
       "Customer ID time                                                  \n",
       "001         2019-12-31 23:59:59                             NaN   \n",
       "002         2019-12-31 23:59:59                             NaN   \n",
       "003         2019-12-31 23:59:59                             NaN   \n",
       "001         2020-01-02 23:59:59                           100.0   \n",
       "002         2020-01-02 23:59:59                            20.0   \n",
       "001         2020-01-05 23:59:59                            13.0   \n",
       "003         2020-01-06 23:59:59                            50.0   \n",
       "\n",
       "                                 MEAN(Transaction.Target)  \\\n",
       "Customer ID time                                            \n",
       "001         2019-12-31 23:59:59                       NaN   \n",
       "002         2019-12-31 23:59:59                       NaN   \n",
       "003         2019-12-31 23:59:59                       NaN   \n",
       "001         2020-01-02 23:59:59                       1.0   \n",
       "002         2020-01-02 23:59:59                       0.0   \n",
       "001         2020-01-05 23:59:59                       0.5   \n",
       "003         2020-01-06 23:59:59                       1.0   \n",
       "\n",
       "                                 MEAN(Transaction.Seconds Stay)  \\\n",
       "Customer ID time                                                  \n",
       "001         2019-12-31 23:59:59                             NaN   \n",
       "002         2019-12-31 23:59:59                             NaN   \n",
       "003         2019-12-31 23:59:59                             NaN   \n",
       "001         2020-01-02 23:59:59                           100.0   \n",
       "002         2020-01-02 23:59:59                            20.0   \n",
       "001         2020-01-05 23:59:59                            56.5   \n",
       "003         2020-01-06 23:59:59                            50.0   \n",
       "\n",
       "                                 MAX(Transaction.Target)  \\\n",
       "Customer ID time                                           \n",
       "001         2019-12-31 23:59:59                      NaN   \n",
       "002         2019-12-31 23:59:59                      NaN   \n",
       "003         2019-12-31 23:59:59                      NaN   \n",
       "001         2020-01-02 23:59:59                      1.0   \n",
       "002         2020-01-02 23:59:59                      0.0   \n",
       "001         2020-01-05 23:59:59                      1.0   \n",
       "003         2020-01-06 23:59:59                      1.0   \n",
       "\n",
       "                                 MAX(Transaction.Seconds Stay)  \\\n",
       "Customer ID time                                                 \n",
       "001         2019-12-31 23:59:59                            NaN   \n",
       "002         2019-12-31 23:59:59                            NaN   \n",
       "003         2019-12-31 23:59:59                            NaN   \n",
       "001         2020-01-02 23:59:59                          100.0   \n",
       "002         2020-01-02 23:59:59                           20.0   \n",
       "001         2020-01-05 23:59:59                          100.0   \n",
       "003         2020-01-06 23:59:59                           50.0   \n",
       "\n",
       "                                 MEDIAN(Transaction.Target)  \\\n",
       "Customer ID time                                              \n",
       "001         2019-12-31 23:59:59                         NaN   \n",
       "002         2019-12-31 23:59:59                         NaN   \n",
       "003         2019-12-31 23:59:59                         NaN   \n",
       "001         2020-01-02 23:59:59                         1.0   \n",
       "002         2020-01-02 23:59:59                         0.0   \n",
       "001         2020-01-05 23:59:59                         0.5   \n",
       "003         2020-01-06 23:59:59                         1.0   \n",
       "\n",
       "                                 MEDIAN(Transaction.Seconds Stay)  \\\n",
       "Customer ID time                                                    \n",
       "001         2019-12-31 23:59:59                               NaN   \n",
       "002         2019-12-31 23:59:59                               NaN   \n",
       "003         2019-12-31 23:59:59                               NaN   \n",
       "001         2020-01-02 23:59:59                             100.0   \n",
       "002         2020-01-02 23:59:59                              20.0   \n",
       "001         2020-01-05 23:59:59                              56.5   \n",
       "003         2020-01-06 23:59:59                              50.0   \n",
       "\n",
       "                                 SKEW(Transaction.Target)  \\\n",
       "Customer ID time                                            \n",
       "001         2019-12-31 23:59:59                       NaN   \n",
       "002         2019-12-31 23:59:59                       NaN   \n",
       "003         2019-12-31 23:59:59                       NaN   \n",
       "001         2020-01-02 23:59:59                       NaN   \n",
       "002         2020-01-02 23:59:59                       NaN   \n",
       "001         2020-01-05 23:59:59                       NaN   \n",
       "003         2020-01-06 23:59:59                       NaN   \n",
       "\n",
       "                                 SKEW(Transaction.Seconds Stay)  \\\n",
       "Customer ID time                                                  \n",
       "001         2019-12-31 23:59:59                             NaN   \n",
       "002         2019-12-31 23:59:59                             NaN   \n",
       "003         2019-12-31 23:59:59                             NaN   \n",
       "001         2020-01-02 23:59:59                             NaN   \n",
       "002         2020-01-02 23:59:59                             NaN   \n",
       "001         2020-01-05 23:59:59                             NaN   \n",
       "003         2020-01-06 23:59:59                             NaN   \n",
       "\n",
       "                                 STD(Transaction.Target)  \\\n",
       "Customer ID time                                           \n",
       "001         2019-12-31 23:59:59                      NaN   \n",
       "002         2019-12-31 23:59:59                      NaN   \n",
       "003         2019-12-31 23:59:59                      NaN   \n",
       "001         2020-01-02 23:59:59                      NaN   \n",
       "002         2020-01-02 23:59:59                      NaN   \n",
       "001         2020-01-05 23:59:59                 0.707107   \n",
       "003         2020-01-06 23:59:59                      NaN   \n",
       "\n",
       "                                 STD(Transaction.Seconds Stay)  \\\n",
       "Customer ID time                                                 \n",
       "001         2019-12-31 23:59:59                            NaN   \n",
       "002         2019-12-31 23:59:59                            NaN   \n",
       "003         2019-12-31 23:59:59                            NaN   \n",
       "001         2020-01-02 23:59:59                            NaN   \n",
       "002         2020-01-02 23:59:59                            NaN   \n",
       "001         2020-01-05 23:59:59                       61.51829   \n",
       "003         2020-01-06 23:59:59                            NaN   \n",
       "\n",
       "                                 TIME_SINCE_LAST(Transaction.Time, unit=hours)  \n",
       "Customer ID time                                                                \n",
       "001         2019-12-31 23:59:59                                            NaN  \n",
       "002         2019-12-31 23:59:59                                            NaN  \n",
       "003         2019-12-31 23:59:59                                            NaN  \n",
       "001         2020-01-02 23:59:59                                      47.999722  \n",
       "002         2020-01-02 23:59:59                                      47.999722  \n",
       "001         2020-01-05 23:59:59                                      71.999722  \n",
       "003         2020-01-06 23:59:59                                     143.999722  "
      ]
     },
     "execution_count": 103,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fm # 特征工程的结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "hide_input": false,
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": true,
   "toc_position": {
    "height": "720px",
    "left": "35.9336px",
    "top": "120.938px",
    "width": "360px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
